From d5d633b6c740c8cdc3f130484ce53ef1f1e425a9 Mon Sep 17 00:00:00 2001 From: Yao Wang Date: Mon, 9 May 2022 14:32:31 +0200 Subject: [PATCH] init commit --- README.md | 54 + RecallNet/environment.yaml | 160 ++ .../train_RecallNet-checkpoint.ipynb | 984 ++++++++++ RecallNet/notebooks/massvis_recall.json | 1747 +++++++++++++++++ RecallNet/notebooks/train_RecallNet.ipynb | 984 ++++++++++ .../Untitled-checkpoint.ipynb | 183 ++ .../attentive_convlstm_new.cpython-36.pyc | Bin 0 -> 19796 bytes .../attentive_convlstm_new.cpython-37.pyc | Bin 0 -> 19756 bytes RecallNet/src/__pycache__/cb.cpython-36.pyc | Bin 0 -> 3287 bytes RecallNet/src/__pycache__/cb.cpython-37.pyc | Bin 0 -> 3281 bytes .../__pycache__/data_loading.cpython-36.pyc | Bin 0 -> 19504 bytes .../__pycache__/data_loading.cpython-37.pyc | Bin 0 -> 19446 bytes .../__pycache__/dcn_resnet_new.cpython-36.pyc | Bin 0 -> 6271 bytes .../__pycache__/dcn_resnet_new.cpython-37.pyc | Bin 0 -> 6025 bytes RecallNet/src/__pycache__/eval.cpython-37.pyc | Bin 0 -> 19470 bytes .../eval_saliconeval.cpython-37.pyc | Bin 0 -> 4084 bytes .../gaussian_prior_new.cpython-36.pyc | Bin 0 -> 6766 bytes .../gaussian_prior_new.cpython-37.pyc | Bin 0 -> 6729 bytes .../__pycache__/losses_keras2.cpython-36.pyc | Bin 0 -> 7516 bytes .../__pycache__/losses_keras2.cpython-37.pyc | Bin 0 -> 7497 bytes .../multiduration_models.cpython-36.pyc | Bin 0 -> 17267 bytes .../multiduration_models.cpython-37.pyc | Bin 0 -> 16829 bytes .../sal_imp_utilities.cpython-36.pyc | Bin 0 -> 22616 bytes .../sal_imp_utilities.cpython-37.pyc | Bin 0 -> 22566 bytes .../singleduration_models.cpython-36.pyc | Bin 0 -> 22027 bytes .../singleduration_models.cpython-37.pyc | Bin 0 -> 20907 bytes RecallNet/src/__pycache__/util.cpython-36.pyc | Bin 0 -> 2240 bytes RecallNet/src/__pycache__/util.cpython-37.pyc | Bin 0 -> 2259 bytes .../xception_custom.cpython-36.pyc | Bin 0 -> 9216 bytes .../xception_custom.cpython-37.pyc | Bin 0 -> 8899 bytes RecallNet/src/attentive_convlstm_new.py | 717 +++++++ RecallNet/src/cb.py | 80 + RecallNet/src/classif_capable_models.py | 566 ++++++ RecallNet/src/dcn_resnet_new.py | 239 +++ RecallNet/src/gaussian_prior_new.py | 241 +++ RecallNet/src/losses_keras2.py | 256 +++ RecallNet/src/sal_imp_utilities.py | 944 +++++++++ RecallNet/src/singleduration_models.py | 822 ++++++++ RecallNet/src/util.py | 67 + RecallNet/src/xception_custom.py | 325 +++ VisRecall/answer_raw/group1.csv | 78 + VisRecall/answer_raw/group10.csv | 61 + VisRecall/answer_raw/group2.csv | 34 + VisRecall/answer_raw/group3.csv | 25 + VisRecall/answer_raw/group4.csv | 51 + VisRecall/answer_raw/group5.csv | 34 + VisRecall/answer_raw/group6.csv | 43 + VisRecall/answer_raw/group7.csv | 19 + VisRecall/answer_raw/group8.csv | 40 + VisRecall/answer_raw/group9.csv | 29 + VisRecall/merged/image_annotation.csv | 201 ++ .../merged/qa/02wEIH1uspxsk1E7VW-KRA==.0.json | 50 + .../merged/qa/0BmWZbQdEukHi79Lit01oQ==.0.json | 49 + .../merged/qa/0Gc4n4lYDn4V19CtJzo_eg==.0.json | 49 + .../merged/qa/0yflU4o2ze89IvWqYRKGKA==.0.json | 49 + VisRecall/merged/qa/129462.json | 49 + VisRecall/merged/qa/129470.json | 49 + VisRecall/merged/qa/143.json | 50 + VisRecall/merged/qa/168.json | 49 + .../merged/qa/1EMgXSmCnY1PeksJZMhlHA==.0.json | 49 + .../merged/qa/1JwHfqlSB3z3qu78N-3Law==.0.json | 49 + .../merged/qa/1_WnR3D8lP-2AK6XsHM74Q==.0.json | 49 + .../merged/qa/1tVCmxZoFO6hq5H_rC0j_w==.0.json | 49 + .../merged/qa/2K-S52z1bcV0xQD4mnuCbw==.0.json | 49 + .../merged/qa/2yyamO0gVGUftCeTJ9WU2Q==.0.json | 49 + .../merged/qa/3LY3OX8bU7uKhgcRPgDRxw==.0.json | 49 + .../merged/qa/3PuDl5gc8C7FWTFXB8kmqw==.0.json | 50 + .../merged/qa/3iRYXLvZ8oVQDMLR-CebnQ==.0.json | 49 + .../merged/qa/3lG2Suf1vlUNqfO9pvq1kw.0.json | 50 + .../merged/qa/4bm2MTzbrTpK41Fhy3Oh2g==.0.json | 49 + .../merged/qa/4dCSXyCVYOxhf_SLYhGkIw==.0.json | 49 + VisRecall/merged/qa/79027.json | 49 + VisRecall/merged/qa/79359.json | 50 + .../merged/qa/8XT9tstaX3P7OjmkeT1xTg==.0.json | 49 + .../merged/qa/JVoKAJWwEgervxjbg2tqMA==.0.json | 49 + .../merged/qa/_1IiNGPpj1s86KzEjQ93YQ==.0.json | 49 + .../merged/qa/_Di4yk2H64QEBkEncRGMhg==.0.json | 50 + .../merged/qa/_Fbq9iW1SCuAYaHmYUXAUA==.0.json | 49 + .../merged/qa/__uID4lztqrYTniGMJdDWQ.0.json | 50 + .../merged/qa/economist_daily_chart_100.json | 50 + .../merged/qa/economist_daily_chart_127.json | 50 + .../merged/qa/economist_daily_chart_137.json | 49 + .../merged/qa/economist_daily_chart_145.json | 49 + .../merged/qa/economist_daily_chart_150.json | 49 + .../merged/qa/economist_daily_chart_162.json | 49 + .../merged/qa/economist_daily_chart_184.json | 50 + .../merged/qa/economist_daily_chart_189.json | 49 + .../merged/qa/economist_daily_chart_191.json | 49 + .../merged/qa/economist_daily_chart_194.json | 49 + .../merged/qa/economist_daily_chart_197.json | 49 + .../merged/qa/economist_daily_chart_198.json | 49 + .../merged/qa/economist_daily_chart_20.json | 49 + .../merged/qa/economist_daily_chart_200.json | 50 + .../merged/qa/economist_daily_chart_202.json | 50 + .../merged/qa/economist_daily_chart_203.json | 49 + .../merged/qa/economist_daily_chart_206.json | 49 + .../merged/qa/economist_daily_chart_207.json | 49 + .../merged/qa/economist_daily_chart_208.json | 49 + .../merged/qa/economist_daily_chart_209.json | 49 + .../merged/qa/economist_daily_chart_211.json | 49 + .../merged/qa/economist_daily_chart_215.json | 49 + .../merged/qa/economist_daily_chart_218.json | 49 + .../merged/qa/economist_daily_chart_223.json | 50 + .../merged/qa/economist_daily_chart_225.json | 49 + .../merged/qa/economist_daily_chart_229.json | 49 + .../merged/qa/economist_daily_chart_235.json | 49 + .../merged/qa/economist_daily_chart_236.json | 49 + .../merged/qa/economist_daily_chart_238.json | 49 + .../merged/qa/economist_daily_chart_242.json | 49 + .../merged/qa/economist_daily_chart_243.json | 49 + .../merged/qa/economist_daily_chart_244.json | 50 + .../merged/qa/economist_daily_chart_247.json | 50 + .../merged/qa/economist_daily_chart_250.json | 49 + .../merged/qa/economist_daily_chart_253.json | 49 + .../merged/qa/economist_daily_chart_257.json | 49 + .../merged/qa/economist_daily_chart_260.json | 49 + .../merged/qa/economist_daily_chart_262.json | 49 + .../merged/qa/economist_daily_chart_264.json | 49 + .../merged/qa/economist_daily_chart_267.json | 50 + .../merged/qa/economist_daily_chart_308.json | 49 + .../merged/qa/economist_daily_chart_319.json | 50 + .../merged/qa/economist_daily_chart_336.json | 49 + .../merged/qa/economist_daily_chart_355.json | 49 + .../merged/qa/economist_daily_chart_376.json | 49 + .../merged/qa/economist_daily_chart_377.json | 49 + .../merged/qa/economist_daily_chart_384.json | 49 + .../merged/qa/economist_daily_chart_387.json | 49 + .../merged/qa/economist_daily_chart_420.json | 49 + .../merged/qa/economist_daily_chart_441.json | 49 + .../merged/qa/economist_daily_chart_447.json | 49 + .../merged/qa/economist_daily_chart_451.json | 49 + .../merged/qa/economist_daily_chart_473.json | 49 + .../merged/qa/economist_daily_chart_513.json | 50 + .../merged/qa/economist_daily_chart_523.json | 49 + .../merged/qa/economist_daily_chart_531.json | 49 + .../merged/qa/economist_daily_chart_532.json | 49 + .../merged/qa/economist_daily_chart_65.json | 49 + .../merged/qa/economist_daily_chart_76.json | 50 + .../merged/qa/economist_daily_chart_77.json | 49 + .../merged/qa/economist_daily_chart_84.json | 49 + .../merged/qa/economist_daily_chart_93.json | 49 + .../merged/qa/economist_daily_chart_95.json | 49 + VisRecall/merged/qa/treasuryA8.json | 49 + VisRecall/merged/qa/treasuryB02.json | 50 + VisRecall/merged/qa/treasuryB06.json | 49 + VisRecall/merged/qa/treasuryB13.json | 49 + VisRecall/merged/qa/treasuryD05_2.json | 49 + VisRecall/merged/qa/treasuryD07_3.json | 49 + VisRecall/merged/qa/treasuryD10.json | 50 + VisRecall/merged/qa/treasuryG01_2.json | 49 + VisRecall/merged/qa/treasuryI01_1.json | 50 + VisRecall/merged/qa/treasuryI02_1.json | 49 + VisRecall/merged/qa/treasuryI02_3.json | 49 + VisRecall/merged/qa/treasuryJ01_2.json | 49 + VisRecall/merged/qa/treasuryJ02_2.json | 50 + VisRecall/merged/qa/treasuryJ03_3.json | 49 + VisRecall/merged/qa/treasuryK03_3.json | 50 + VisRecall/merged/qa/treasuryK04.json | 49 + VisRecall/merged/qa/treasuryK05_2.json | 49 + VisRecall/merged/qa/treasuryL01.json | 49 + VisRecall/merged/qa/treasuryL02_1.json | 49 + VisRecall/merged/qa/treasuryL02_2.json | 49 + VisRecall/merged/qa/treasuryL03_2.json | 50 + VisRecall/merged/qa/treasuryL07_2.json | 49 + VisRecall/merged/qa/treasuryL15_2.json | 49 + VisRecall/merged/qa/treasuryL16.json | 50 + VisRecall/merged/qa/whoB04_1.json | 50 + VisRecall/merged/qa/whoB05_1.json | 49 + VisRecall/merged/qa/whoB08_1.json | 50 + VisRecall/merged/qa/whoB10_1.json | 49 + VisRecall/merged/qa/whoB11_1.json | 49 + VisRecall/merged/qa/whoB13_1.json | 50 + VisRecall/merged/qa/whoB13_2.json | 49 + VisRecall/merged/qa/whoB14_1.json | 49 + VisRecall/merged/qa/whoB17_1.json | 49 + VisRecall/merged/qa/whoB19_1.json | 49 + VisRecall/merged/qa/whoB20_1.json | 49 + VisRecall/merged/qa/whoB22_1.json | 50 + VisRecall/merged/qa/whoB24_1.json | 49 + VisRecall/merged/qa/whoB25_1.json | 49 + VisRecall/merged/qa/whoB26_1.json | 50 + VisRecall/merged/qa/whoB34_1.json | 50 + VisRecall/merged/qa/whoB36_1.json | 49 + VisRecall/merged/qa/whoC02_2.json | 49 + VisRecall/merged/qa/whoC13.json | 49 + VisRecall/merged/qa/whoC22.json | 49 + VisRecall/merged/qa/whoF03.json | 49 + VisRecall/merged/qa/whoF06.json | 49 + VisRecall/merged/qa/whoF15.json | 49 + VisRecall/merged/qa/whoH01_1.json | 49 + VisRecall/merged/qa/whoH12_1.json | 49 + VisRecall/merged/qa/whoH13_3.json | 49 + VisRecall/merged/qa/whoI09_1.json | 49 + VisRecall/merged/qa/whoJ01_1.json | 50 + VisRecall/merged/qa/whoJ10.json | 49 + VisRecall/merged/qa/whoJ13_1.json | 49 + VisRecall/merged/qa/whoJ22_1.json | 49 + VisRecall/merged/qa/whoJ23.json | 49 + VisRecall/merged/qa/whoJ24_1.json | 49 + VisRecall/merged/qa/whoJ24_2.json | 49 + VisRecall/merged/qa/whoJ33.json | 49 + VisRecall/merged/qa/whoJ36_2.json | 49 + VisRecall/merged/qa/whoJ38_2.json | 49 + VisRecall/merged/qa/whoJ40_2.json | 49 + VisRecall/merged/qa/whoJ43_1.json | 49 + VisRecall/merged/qa/whoJ44.json | 49 + VisRecall/merged/qa/whoJ46_1.json | 49 + VisRecall/merged/qa/whoK01.json | 49 + VisRecall/merged/qa/whoK04_1.json | 49 + VisRecall/merged/qa/whoK06_2.json | 49 + VisRecall/merged/qa/whoK08.json | 49 + VisRecall/merged/qa/whoK21.json | 49 + VisRecall/merged/qa/whoL05.json | 49 + VisRecall/merged/qa/whoL06.json | 49 + VisRecall/merged/qa/whoM01.json | 49 + VisRecall/merged/qa/whoM05.json | 49 + VisRecall/merged/qa/whoN06_1.json | 50 + VisRecall/merged/qa/whoN19_1.json | 49 + VisRecall/merged/qa/whoN27.json | 49 + VisRecall/merged/qa/whoN32_1.json | 50 + VisRecall/merged/qa/whoN35_1.json | 49 + VisRecall/merged/qa/whoN36.json | 49 + VisRecall/merged/qa/whoO15.json | 49 + VisRecall/merged/qa/whoO22_3.json | 50 + VisRecall/merged/qa/whoQ01.json | 49 + VisRecall/merged/qa/whoQ06_2.json | 49 + VisRecall/merged/qa/whoQ12_2.json | 49 + VisRecall/merged/qa/whoQ42_1.json | 49 + VisRecall/merged/qa/whoQ51_1.json | 49 + VisRecall/merged/qa/wsj107.json | 49 + VisRecall/merged/qa/wsj11.json | 49 + VisRecall/merged/qa/wsj128.json | 49 + VisRecall/merged/qa/wsj135.json | 50 + VisRecall/merged/qa/wsj151.json | 49 + VisRecall/merged/qa/wsj168.json | 50 + VisRecall/merged/qa/wsj180.json | 49 + VisRecall/merged/qa/wsj265.json | 49 + VisRecall/merged/qa/wsj277.json | 50 + VisRecall/merged/qa/wsj3.json | 49 + VisRecall/merged/qa/wsj320.json | 49 + VisRecall/merged/qa/wsj340.json | 49 + VisRecall/merged/qa/wsj342.json | 49 + VisRecall/merged/qa/wsj553.json | 49 + VisRecall/merged/qa/wsj56.json | 49 + VisRecall/merged/qa/wsj593.json | 50 + VisRecall/merged/qa/wsj60.json | 49 + VisRecall/merged/qa/wsj72.json | 49 + VisRecall/merged/qa/wsj76.json | 49 + VisRecall/merged/qa/wsj8.json | 49 + VisRecall/merged/qa/wsj86.json | 49 + VisRecall/merged/qa/wsj88.json | 49 + .../merged/src/02wEIH1uspxsk1E7VW-KRA==.0.png | Bin 0 -> 224291 bytes .../merged/src/0BmWZbQdEukHi79Lit01oQ==.0.png | Bin 0 -> 104148 bytes .../merged/src/0Gc4n4lYDn4V19CtJzo_eg==.0.png | Bin 0 -> 13979 bytes .../merged/src/0yflU4o2ze89IvWqYRKGKA==.0.png | Bin 0 -> 97636 bytes VisRecall/merged/src/129462.png | Bin 0 -> 30886 bytes VisRecall/merged/src/129470.png | Bin 0 -> 23540 bytes VisRecall/merged/src/143.png | Bin 0 -> 37376 bytes VisRecall/merged/src/168.png | Bin 0 -> 32225 bytes .../merged/src/1EMgXSmCnY1PeksJZMhlHA==.0.png | Bin 0 -> 122297 bytes .../merged/src/1JwHfqlSB3z3qu78N-3Law==.0.png | Bin 0 -> 911371 bytes .../merged/src/1_WnR3D8lP-2AK6XsHM74Q==.0.png | Bin 0 -> 62589 bytes .../merged/src/1tVCmxZoFO6hq5H_rC0j_w==.0.png | Bin 0 -> 94767 bytes .../merged/src/2K-S52z1bcV0xQD4mnuCbw==.0.jpg | Bin 0 -> 67209 bytes .../merged/src/2yyamO0gVGUftCeTJ9WU2Q==.0.png | Bin 0 -> 75030 bytes .../merged/src/3LY3OX8bU7uKhgcRPgDRxw==.0.png | Bin 0 -> 404952 bytes .../merged/src/3PuDl5gc8C7FWTFXB8kmqw==.0.png | Bin 0 -> 27585 bytes .../merged/src/3iRYXLvZ8oVQDMLR-CebnQ==.0.png | Bin 0 -> 81265 bytes .../merged/src/3lG2Suf1vlUNqfO9pvq1kw.0.png | Bin 0 -> 159779 bytes .../merged/src/4bm2MTzbrTpK41Fhy3Oh2g==.0.png | Bin 0 -> 48673 bytes .../merged/src/4dCSXyCVYOxhf_SLYhGkIw==.0.png | Bin 0 -> 117344 bytes VisRecall/merged/src/79027.png | Bin 0 -> 38654 bytes VisRecall/merged/src/79359.png | Bin 0 -> 45679 bytes .../merged/src/8XT9tstaX3P7OjmkeT1xTg==.0.png | Bin 0 -> 46124 bytes .../merged/src/JVoKAJWwEgervxjbg2tqMA==.0.jpg | Bin 0 -> 42226 bytes .../merged/src/_1IiNGPpj1s86KzEjQ93YQ==.0.jpg | Bin 0 -> 12821 bytes .../merged/src/_Di4yk2H64QEBkEncRGMhg==.0.png | Bin 0 -> 14397 bytes .../merged/src/_Fbq9iW1SCuAYaHmYUXAUA==.0.jpg | Bin 0 -> 37180 bytes .../merged/src/__uID4lztqrYTniGMJdDWQ.0.jpg | Bin 0 -> 97314 bytes .../merged/src/__uID4lztqrYTniGMJdDWQ.0.png | Bin 0 -> 367876 bytes .../merged/src/economist_daily_chart_100.png | Bin 0 -> 60041 bytes .../merged/src/economist_daily_chart_127.png | Bin 0 -> 114961 bytes .../merged/src/economist_daily_chart_137.png | Bin 0 -> 151967 bytes .../merged/src/economist_daily_chart_145.png | Bin 0 -> 83150 bytes .../merged/src/economist_daily_chart_150.png | Bin 0 -> 57623 bytes .../merged/src/economist_daily_chart_162.png | Bin 0 -> 73679 bytes .../merged/src/economist_daily_chart_184.png | Bin 0 -> 53042 bytes .../merged/src/economist_daily_chart_189.png | Bin 0 -> 34627 bytes .../merged/src/economist_daily_chart_191.png | Bin 0 -> 140906 bytes .../merged/src/economist_daily_chart_194.png | Bin 0 -> 112649 bytes .../merged/src/economist_daily_chart_197.png | Bin 0 -> 32430 bytes .../merged/src/economist_daily_chart_198.png | Bin 0 -> 72054 bytes .../merged/src/economist_daily_chart_20.png | Bin 0 -> 64918 bytes .../merged/src/economist_daily_chart_200.png | Bin 0 -> 64241 bytes .../merged/src/economist_daily_chart_202.png | Bin 0 -> 64374 bytes .../merged/src/economist_daily_chart_203.png | Bin 0 -> 66396 bytes .../merged/src/economist_daily_chart_206.png | Bin 0 -> 129439 bytes .../merged/src/economist_daily_chart_207.png | Bin 0 -> 40895 bytes .../merged/src/economist_daily_chart_208.png | Bin 0 -> 111867 bytes .../merged/src/economist_daily_chart_209.png | Bin 0 -> 73576 bytes .../merged/src/economist_daily_chart_211.png | Bin 0 -> 53468 bytes .../merged/src/economist_daily_chart_215.png | Bin 0 -> 100293 bytes .../merged/src/economist_daily_chart_218.png | Bin 0 -> 58083 bytes .../merged/src/economist_daily_chart_223.png | Bin 0 -> 48558 bytes .../merged/src/economist_daily_chart_225.png | Bin 0 -> 75518 bytes .../merged/src/economist_daily_chart_229.png | Bin 0 -> 100090 bytes .../merged/src/economist_daily_chart_235.png | Bin 0 -> 67894 bytes .../merged/src/economist_daily_chart_236.png | Bin 0 -> 52026 bytes .../merged/src/economist_daily_chart_238.png | Bin 0 -> 90543 bytes .../merged/src/economist_daily_chart_242.png | Bin 0 -> 58499 bytes .../merged/src/economist_daily_chart_243.png | Bin 0 -> 126338 bytes .../merged/src/economist_daily_chart_244.png | Bin 0 -> 134276 bytes .../merged/src/economist_daily_chart_247.png | Bin 0 -> 65737 bytes .../merged/src/economist_daily_chart_250.png | Bin 0 -> 40521 bytes .../merged/src/economist_daily_chart_253.png | Bin 0 -> 65185 bytes .../merged/src/economist_daily_chart_257.png | Bin 0 -> 161521 bytes .../merged/src/economist_daily_chart_260.png | Bin 0 -> 64462 bytes .../merged/src/economist_daily_chart_262.png | Bin 0 -> 151281 bytes .../merged/src/economist_daily_chart_264.png | Bin 0 -> 69539 bytes .../merged/src/economist_daily_chart_267.png | Bin 0 -> 92599 bytes .../merged/src/economist_daily_chart_308.png | Bin 0 -> 135974 bytes .../merged/src/economist_daily_chart_319.png | Bin 0 -> 21292 bytes .../merged/src/economist_daily_chart_336.png | Bin 0 -> 53069 bytes .../merged/src/economist_daily_chart_355.png | Bin 0 -> 58044 bytes .../merged/src/economist_daily_chart_376.png | Bin 0 -> 255159 bytes .../merged/src/economist_daily_chart_377.png | Bin 0 -> 97671 bytes .../merged/src/economist_daily_chart_384.png | Bin 0 -> 75680 bytes .../merged/src/economist_daily_chart_387.png | Bin 0 -> 82425 bytes .../merged/src/economist_daily_chart_420.png | Bin 0 -> 71366 bytes .../merged/src/economist_daily_chart_441.png | Bin 0 -> 133522 bytes .../merged/src/economist_daily_chart_447.png | Bin 0 -> 263393 bytes .../merged/src/economist_daily_chart_451.png | Bin 0 -> 232275 bytes .../merged/src/economist_daily_chart_473.png | Bin 0 -> 69826 bytes .../merged/src/economist_daily_chart_513.png | Bin 0 -> 178094 bytes .../merged/src/economist_daily_chart_523.png | Bin 0 -> 190296 bytes .../merged/src/economist_daily_chart_531.png | Bin 0 -> 95470 bytes .../merged/src/economist_daily_chart_532.png | Bin 0 -> 281521 bytes .../merged/src/economist_daily_chart_65.png | Bin 0 -> 55620 bytes .../merged/src/economist_daily_chart_76.png | Bin 0 -> 95090 bytes .../merged/src/economist_daily_chart_77.png | Bin 0 -> 56015 bytes .../merged/src/economist_daily_chart_84.png | Bin 0 -> 44356 bytes .../merged/src/economist_daily_chart_93.png | Bin 0 -> 124279 bytes .../merged/src/economist_daily_chart_95.png | Bin 0 -> 188852 bytes VisRecall/merged/src/treasuryA8.png | Bin 0 -> 197357 bytes VisRecall/merged/src/treasuryB02.png | Bin 0 -> 910467 bytes VisRecall/merged/src/treasuryB06.png | Bin 0 -> 1185723 bytes VisRecall/merged/src/treasuryB13.png | Bin 0 -> 871231 bytes VisRecall/merged/src/treasuryD05_2.png | Bin 0 -> 161659 bytes VisRecall/merged/src/treasuryD07_3.png | Bin 0 -> 86544 bytes VisRecall/merged/src/treasuryD10.png | Bin 0 -> 591467 bytes VisRecall/merged/src/treasuryG01_2.png | Bin 0 -> 217133 bytes VisRecall/merged/src/treasuryI01_1.png | Bin 0 -> 46079 bytes VisRecall/merged/src/treasuryI02_1.png | Bin 0 -> 56502 bytes VisRecall/merged/src/treasuryI02_3.png | Bin 0 -> 42272 bytes VisRecall/merged/src/treasuryJ01_2.png | Bin 0 -> 64271 bytes VisRecall/merged/src/treasuryJ02_2.png | Bin 0 -> 49888 bytes VisRecall/merged/src/treasuryJ03_3.png | Bin 0 -> 65216 bytes VisRecall/merged/src/treasuryK03_3.png | Bin 0 -> 37483 bytes VisRecall/merged/src/treasuryK04.png | Bin 0 -> 91868 bytes VisRecall/merged/src/treasuryK05_2.png | Bin 0 -> 59875 bytes VisRecall/merged/src/treasuryL01.png | Bin 0 -> 77726 bytes VisRecall/merged/src/treasuryL02_1.png | Bin 0 -> 86202 bytes VisRecall/merged/src/treasuryL02_2.png | Bin 0 -> 55166 bytes VisRecall/merged/src/treasuryL03_2.png | Bin 0 -> 75582 bytes VisRecall/merged/src/treasuryL07_2.png | Bin 0 -> 74914 bytes VisRecall/merged/src/treasuryL15_2.png | Bin 0 -> 43386 bytes VisRecall/merged/src/treasuryL16.png | Bin 0 -> 70300 bytes VisRecall/merged/src/whoB04_1.png | Bin 0 -> 161824 bytes VisRecall/merged/src/whoB05_1.png | Bin 0 -> 139174 bytes VisRecall/merged/src/whoB08_1.png | Bin 0 -> 92888 bytes VisRecall/merged/src/whoB10_1.png | Bin 0 -> 144325 bytes VisRecall/merged/src/whoB11_1.png | Bin 0 -> 208631 bytes VisRecall/merged/src/whoB13_1.png | Bin 0 -> 119896 bytes VisRecall/merged/src/whoB13_2.png | Bin 0 -> 220379 bytes VisRecall/merged/src/whoB14_1.png | Bin 0 -> 292955 bytes VisRecall/merged/src/whoB17_1.png | Bin 0 -> 112206 bytes VisRecall/merged/src/whoB19_1.png | Bin 0 -> 183610 bytes VisRecall/merged/src/whoB20_1.png | Bin 0 -> 207306 bytes VisRecall/merged/src/whoB22_1.png | Bin 0 -> 133887 bytes VisRecall/merged/src/whoB24_1.png | Bin 0 -> 175766 bytes VisRecall/merged/src/whoB25_1.png | Bin 0 -> 142985 bytes VisRecall/merged/src/whoB26_1.png | Bin 0 -> 378905 bytes VisRecall/merged/src/whoB34_1.png | Bin 0 -> 170744 bytes VisRecall/merged/src/whoB36_1.png | Bin 0 -> 180391 bytes VisRecall/merged/src/whoC02_2.png | Bin 0 -> 169228 bytes VisRecall/merged/src/whoC13.png | Bin 0 -> 96484 bytes VisRecall/merged/src/whoC22.png | Bin 0 -> 113112 bytes VisRecall/merged/src/whoF03.png | Bin 0 -> 397778 bytes VisRecall/merged/src/whoF06.png | Bin 0 -> 415533 bytes VisRecall/merged/src/whoF15.png | Bin 0 -> 535957 bytes VisRecall/merged/src/whoH01_1.png | Bin 0 -> 79628 bytes VisRecall/merged/src/whoH12_1.png | Bin 0 -> 151924 bytes VisRecall/merged/src/whoH13_3.png | Bin 0 -> 68208 bytes VisRecall/merged/src/whoI09_1.png | Bin 0 -> 233203 bytes VisRecall/merged/src/whoJ01_1.png | Bin 0 -> 292739 bytes VisRecall/merged/src/whoJ10.png | Bin 0 -> 145185 bytes VisRecall/merged/src/whoJ13_1.png | Bin 0 -> 244635 bytes VisRecall/merged/src/whoJ22_1.png | Bin 0 -> 98112 bytes VisRecall/merged/src/whoJ23.png | Bin 0 -> 146251 bytes VisRecall/merged/src/whoJ24_1.png | Bin 0 -> 139718 bytes VisRecall/merged/src/whoJ24_2.png | Bin 0 -> 157368 bytes VisRecall/merged/src/whoJ33.png | Bin 0 -> 322965 bytes VisRecall/merged/src/whoJ36_2.png | Bin 0 -> 213732 bytes VisRecall/merged/src/whoJ38_2.png | Bin 0 -> 139396 bytes VisRecall/merged/src/whoJ40_2.png | Bin 0 -> 129786 bytes VisRecall/merged/src/whoJ43_1.png | Bin 0 -> 135447 bytes VisRecall/merged/src/whoJ44.png | Bin 0 -> 146799 bytes VisRecall/merged/src/whoJ46_1.png | Bin 0 -> 139524 bytes VisRecall/merged/src/whoK01.png | Bin 0 -> 154387 bytes VisRecall/merged/src/whoK04_1.png | Bin 0 -> 424592 bytes VisRecall/merged/src/whoK06_2.png | Bin 0 -> 234876 bytes VisRecall/merged/src/whoK08.png | Bin 0 -> 251203 bytes VisRecall/merged/src/whoK21.png | Bin 0 -> 182623 bytes VisRecall/merged/src/whoL05.png | Bin 0 -> 180561 bytes VisRecall/merged/src/whoL06.png | Bin 0 -> 131213 bytes VisRecall/merged/src/whoM01.png | Bin 0 -> 54673 bytes VisRecall/merged/src/whoM05.png | Bin 0 -> 43497 bytes VisRecall/merged/src/whoN06_1.png | Bin 0 -> 57147 bytes VisRecall/merged/src/whoN19_1.png | Bin 0 -> 45242 bytes VisRecall/merged/src/whoN27.png | Bin 0 -> 42840 bytes VisRecall/merged/src/whoN32_1.png | Bin 0 -> 45656 bytes VisRecall/merged/src/whoN35_1.png | Bin 0 -> 42880 bytes VisRecall/merged/src/whoN36.png | Bin 0 -> 42005 bytes VisRecall/merged/src/whoO15.png | Bin 0 -> 43070 bytes VisRecall/merged/src/whoO22_3.png | Bin 0 -> 67756 bytes VisRecall/merged/src/whoQ01.png | Bin 0 -> 64409 bytes VisRecall/merged/src/whoQ06_2.png | Bin 0 -> 67483 bytes VisRecall/merged/src/whoQ12_2.png | Bin 0 -> 64150 bytes VisRecall/merged/src/whoQ42_1.png | Bin 0 -> 30789 bytes VisRecall/merged/src/whoQ51_1.png | Bin 0 -> 24996 bytes VisRecall/merged/src/wsj107.png | Bin 0 -> 94177 bytes VisRecall/merged/src/wsj11.png | Bin 0 -> 145044 bytes VisRecall/merged/src/wsj128.png | Bin 0 -> 158188 bytes VisRecall/merged/src/wsj135.png | Bin 0 -> 157601 bytes VisRecall/merged/src/wsj151.png | Bin 0 -> 168952 bytes VisRecall/merged/src/wsj168.png | Bin 0 -> 209448 bytes VisRecall/merged/src/wsj180.png | Bin 0 -> 213715 bytes VisRecall/merged/src/wsj265.png | Bin 0 -> 115000 bytes VisRecall/merged/src/wsj277.png | Bin 0 -> 124857 bytes VisRecall/merged/src/wsj3.png | Bin 0 -> 131910 bytes VisRecall/merged/src/wsj320.png | Bin 0 -> 142013 bytes VisRecall/merged/src/wsj340.png | Bin 0 -> 103331 bytes VisRecall/merged/src/wsj342.png | Bin 0 -> 158271 bytes VisRecall/merged/src/wsj553.png | Bin 0 -> 127757 bytes VisRecall/merged/src/wsj56.png | Bin 0 -> 75706 bytes VisRecall/merged/src/wsj593.png | Bin 0 -> 83854 bytes VisRecall/merged/src/wsj60.png | Bin 0 -> 141303 bytes VisRecall/merged/src/wsj72.png | Bin 0 -> 265441 bytes VisRecall/merged/src/wsj76.png | Bin 0 -> 79561 bytes VisRecall/merged/src/wsj8.png | Bin 0 -> 267086 bytes VisRecall/merged/src/wsj86.png | Bin 0 -> 252558 bytes VisRecall/merged/src/wsj88.png | Bin 0 -> 132887 bytes .../training_data/F-question/train_split0.npy | Bin 0 -> 167382 bytes .../training_data/F-question/train_split1.npy | Bin 0 -> 167414 bytes .../training_data/F-question/train_split2.npy | Bin 0 -> 167580 bytes .../training_data/F-question/train_split3.npy | Bin 0 -> 168068 bytes .../training_data/F-question/train_split4.npy | Bin 0 -> 167434 bytes .../training_data/F-question/training.npy | Bin 0 -> 209451 bytes .../training_data/F-question/val_split0.npy | Bin 0 -> 41737 bytes .../training_data/F-question/val_split1.npy | Bin 0 -> 41755 bytes .../training_data/F-question/val_split2.npy | Bin 0 -> 41461 bytes .../training_data/F-question/val_split3.npy | Bin 0 -> 40973 bytes .../training_data/F-question/val_split4.npy | Bin 0 -> 41667 bytes .../FE-question/train_split0.npy | Bin 0 -> 144172 bytes .../FE-question/train_split1.npy | Bin 0 -> 143911 bytes .../FE-question/train_split2.npy | Bin 0 -> 144568 bytes .../FE-question/train_split3.npy | Bin 0 -> 144512 bytes .../FE-question/train_split4.npy | Bin 0 -> 144962 bytes .../training_data/FE-question/training.npy | Bin 0 -> 180521 bytes .../training_data/FE-question/val_split0.npy | Bin 0 -> 35984 bytes .../training_data/FE-question/val_split1.npy | Bin 0 -> 36538 bytes .../training_data/FE-question/val_split2.npy | Bin 0 -> 36073 bytes .../training_data/FE-question/val_split3.npy | Bin 0 -> 35629 bytes .../training_data/FE-question/val_split4.npy | Bin 0 -> 34967 bytes .../RV-question/train_split0.npy | Bin 0 -> 98681 bytes .../RV-question/train_split1.npy | Bin 0 -> 99018 bytes .../RV-question/train_split2.npy | Bin 0 -> 99449 bytes .../RV-question/train_split3.npy | Bin 0 -> 98870 bytes .../RV-question/train_split4.npy | Bin 0 -> 99321 bytes .../training_data/RV-question/training.npy | Bin 0 -> 123752 bytes .../training_data/RV-question/val_split0.npy | Bin 0 -> 24793 bytes .../training_data/RV-question/val_split1.npy | Bin 0 -> 24659 bytes .../training_data/RV-question/val_split2.npy | Bin 0 -> 24399 bytes .../training_data/RV-question/val_split3.npy | Bin 0 -> 24771 bytes .../training_data/RV-question/val_split4.npy | Bin 0 -> 24276 bytes .../training_data/T-question/train_split0.npy | Bin 0 -> 179315 bytes .../training_data/T-question/train_split1.npy | Bin 0 -> 178359 bytes .../training_data/T-question/train_split2.npy | Bin 0 -> 180535 bytes .../training_data/T-question/train_split3.npy | Bin 0 -> 179617 bytes .../training_data/T-question/train_split4.npy | Bin 0 -> 180601 bytes .../training_data/T-question/training.npy | Bin 0 -> 224542 bytes .../training_data/T-question/val_split0.npy | Bin 0 -> 44877 bytes .../training_data/T-question/val_split1.npy | Bin 0 -> 46036 bytes .../training_data/T-question/val_split2.npy | Bin 0 -> 43953 bytes .../training_data/T-question/val_split3.npy | Bin 0 -> 44724 bytes .../training_data/T-question/val_split4.npy | Bin 0 -> 43549 bytes .../training_data/U-question/train_split0.npy | Bin 0 -> 62360 bytes .../training_data/U-question/train_split1.npy | Bin 0 -> 64863 bytes .../training_data/U-question/train_split2.npy | Bin 0 -> 64037 bytes .../training_data/U-question/train_split3.npy | Bin 0 -> 64502 bytes .../training_data/U-question/train_split4.npy | Bin 0 -> 64105 bytes .../training_data/U-question/training.npy | Bin 0 -> 79892 bytes .../training_data/U-question/val_split0.npy | Bin 0 -> 17222 bytes .../training_data/U-question/val_split1.npy | Bin 0 -> 14922 bytes .../training_data/U-question/val_split2.npy | Bin 0 -> 15924 bytes .../training_data/U-question/val_split3.npy | Bin 0 -> 15468 bytes .../training_data/U-question/val_split4.npy | Bin 0 -> 15734 bytes .../training_data/all/training_group1.npy | Bin 0 -> 13424 bytes .../training_data/all/training_group10.npy | Bin 0 -> 13878 bytes .../training_data/all/training_group2.npy | Bin 0 -> 13742 bytes .../training_data/all/training_group3.npy | Bin 0 -> 13398 bytes .../training_data/all/training_group4.npy | Bin 0 -> 13295 bytes .../training_data/all/training_group5.npy | Bin 0 -> 12905 bytes .../training_data/all/training_group6.npy | Bin 0 -> 13740 bytes .../training_data/all/training_group7.npy | Bin 0 -> 13355 bytes .../training_data/all/training_group8.npy | Bin 0 -> 13677 bytes .../training_data/all/training_group9.npy | Bin 0 -> 13166 bytes 517 files changed, 18824 insertions(+) create mode 100644 README.md create mode 100644 RecallNet/environment.yaml create mode 100644 RecallNet/notebooks/.ipynb_checkpoints/train_RecallNet-checkpoint.ipynb create mode 100644 RecallNet/notebooks/massvis_recall.json create mode 100644 RecallNet/notebooks/train_RecallNet.ipynb create mode 100644 RecallNet/src/.ipynb_checkpoints/Untitled-checkpoint.ipynb create mode 100644 RecallNet/src/__pycache__/attentive_convlstm_new.cpython-36.pyc create mode 100644 RecallNet/src/__pycache__/attentive_convlstm_new.cpython-37.pyc create mode 100644 RecallNet/src/__pycache__/cb.cpython-36.pyc create mode 100644 RecallNet/src/__pycache__/cb.cpython-37.pyc create mode 100644 RecallNet/src/__pycache__/data_loading.cpython-36.pyc create mode 100644 RecallNet/src/__pycache__/data_loading.cpython-37.pyc create mode 100644 RecallNet/src/__pycache__/dcn_resnet_new.cpython-36.pyc create mode 100644 RecallNet/src/__pycache__/dcn_resnet_new.cpython-37.pyc create mode 100644 RecallNet/src/__pycache__/eval.cpython-37.pyc create mode 100644 RecallNet/src/__pycache__/eval_saliconeval.cpython-37.pyc create mode 100644 RecallNet/src/__pycache__/gaussian_prior_new.cpython-36.pyc create mode 100644 RecallNet/src/__pycache__/gaussian_prior_new.cpython-37.pyc create mode 100644 RecallNet/src/__pycache__/losses_keras2.cpython-36.pyc create mode 100644 RecallNet/src/__pycache__/losses_keras2.cpython-37.pyc create mode 100644 RecallNet/src/__pycache__/multiduration_models.cpython-36.pyc create mode 100644 RecallNet/src/__pycache__/multiduration_models.cpython-37.pyc create mode 100644 RecallNet/src/__pycache__/sal_imp_utilities.cpython-36.pyc create mode 100644 RecallNet/src/__pycache__/sal_imp_utilities.cpython-37.pyc create mode 100644 RecallNet/src/__pycache__/singleduration_models.cpython-36.pyc create mode 100644 RecallNet/src/__pycache__/singleduration_models.cpython-37.pyc create mode 100644 RecallNet/src/__pycache__/util.cpython-36.pyc create mode 100644 RecallNet/src/__pycache__/util.cpython-37.pyc create mode 100644 RecallNet/src/__pycache__/xception_custom.cpython-36.pyc create mode 100644 RecallNet/src/__pycache__/xception_custom.cpython-37.pyc create mode 100644 RecallNet/src/attentive_convlstm_new.py create mode 100644 RecallNet/src/cb.py create mode 100644 RecallNet/src/classif_capable_models.py create mode 100644 RecallNet/src/dcn_resnet_new.py create mode 100644 RecallNet/src/gaussian_prior_new.py create mode 100644 RecallNet/src/losses_keras2.py create mode 100644 RecallNet/src/sal_imp_utilities.py create mode 100644 RecallNet/src/singleduration_models.py create mode 100644 RecallNet/src/util.py create mode 100644 RecallNet/src/xception_custom.py create mode 100755 VisRecall/answer_raw/group1.csv create mode 100755 VisRecall/answer_raw/group10.csv create mode 100755 VisRecall/answer_raw/group2.csv create mode 100755 VisRecall/answer_raw/group3.csv create mode 100755 VisRecall/answer_raw/group4.csv create mode 100755 VisRecall/answer_raw/group5.csv create mode 100755 VisRecall/answer_raw/group6.csv create mode 100755 VisRecall/answer_raw/group7.csv create mode 100755 VisRecall/answer_raw/group8.csv create mode 100755 VisRecall/answer_raw/group9.csv create mode 100644 VisRecall/merged/image_annotation.csv create mode 100755 VisRecall/merged/qa/02wEIH1uspxsk1E7VW-KRA==.0.json create mode 100755 VisRecall/merged/qa/0BmWZbQdEukHi79Lit01oQ==.0.json create mode 100755 VisRecall/merged/qa/0Gc4n4lYDn4V19CtJzo_eg==.0.json create mode 100755 VisRecall/merged/qa/0yflU4o2ze89IvWqYRKGKA==.0.json create mode 100755 VisRecall/merged/qa/129462.json create mode 100755 VisRecall/merged/qa/129470.json create mode 100755 VisRecall/merged/qa/143.json create mode 100755 VisRecall/merged/qa/168.json create mode 100755 VisRecall/merged/qa/1EMgXSmCnY1PeksJZMhlHA==.0.json create mode 100755 VisRecall/merged/qa/1JwHfqlSB3z3qu78N-3Law==.0.json create mode 100755 VisRecall/merged/qa/1_WnR3D8lP-2AK6XsHM74Q==.0.json create mode 100755 VisRecall/merged/qa/1tVCmxZoFO6hq5H_rC0j_w==.0.json create mode 100755 VisRecall/merged/qa/2K-S52z1bcV0xQD4mnuCbw==.0.json create mode 100755 VisRecall/merged/qa/2yyamO0gVGUftCeTJ9WU2Q==.0.json create mode 100755 VisRecall/merged/qa/3LY3OX8bU7uKhgcRPgDRxw==.0.json create mode 100755 VisRecall/merged/qa/3PuDl5gc8C7FWTFXB8kmqw==.0.json create mode 100755 VisRecall/merged/qa/3iRYXLvZ8oVQDMLR-CebnQ==.0.json create mode 100755 VisRecall/merged/qa/3lG2Suf1vlUNqfO9pvq1kw.0.json create mode 100755 VisRecall/merged/qa/4bm2MTzbrTpK41Fhy3Oh2g==.0.json create mode 100755 VisRecall/merged/qa/4dCSXyCVYOxhf_SLYhGkIw==.0.json create mode 100755 VisRecall/merged/qa/79027.json create mode 100755 VisRecall/merged/qa/79359.json create mode 100755 VisRecall/merged/qa/8XT9tstaX3P7OjmkeT1xTg==.0.json create mode 100755 VisRecall/merged/qa/JVoKAJWwEgervxjbg2tqMA==.0.json create mode 100755 VisRecall/merged/qa/_1IiNGPpj1s86KzEjQ93YQ==.0.json create mode 100755 VisRecall/merged/qa/_Di4yk2H64QEBkEncRGMhg==.0.json create mode 100755 VisRecall/merged/qa/_Fbq9iW1SCuAYaHmYUXAUA==.0.json create mode 100755 VisRecall/merged/qa/__uID4lztqrYTniGMJdDWQ.0.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_100.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_127.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_137.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_145.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_150.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_162.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_184.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_189.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_191.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_194.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_197.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_198.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_20.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_200.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_202.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_203.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_206.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_207.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_208.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_209.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_211.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_215.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_218.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_223.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_225.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_229.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_235.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_236.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_238.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_242.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_243.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_244.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_247.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_250.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_253.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_257.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_260.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_262.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_264.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_267.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_308.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_319.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_336.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_355.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_376.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_377.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_384.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_387.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_420.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_441.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_447.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_451.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_473.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_513.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_523.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_531.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_532.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_65.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_76.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_77.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_84.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_93.json create mode 100755 VisRecall/merged/qa/economist_daily_chart_95.json create mode 100755 VisRecall/merged/qa/treasuryA8.json create mode 100755 VisRecall/merged/qa/treasuryB02.json create mode 100755 VisRecall/merged/qa/treasuryB06.json create mode 100755 VisRecall/merged/qa/treasuryB13.json create mode 100755 VisRecall/merged/qa/treasuryD05_2.json create mode 100755 VisRecall/merged/qa/treasuryD07_3.json create mode 100755 VisRecall/merged/qa/treasuryD10.json create mode 100755 VisRecall/merged/qa/treasuryG01_2.json create mode 100755 VisRecall/merged/qa/treasuryI01_1.json create mode 100755 VisRecall/merged/qa/treasuryI02_1.json create mode 100755 VisRecall/merged/qa/treasuryI02_3.json create mode 100755 VisRecall/merged/qa/treasuryJ01_2.json create mode 100755 VisRecall/merged/qa/treasuryJ02_2.json create mode 100755 VisRecall/merged/qa/treasuryJ03_3.json create mode 100755 VisRecall/merged/qa/treasuryK03_3.json create mode 100755 VisRecall/merged/qa/treasuryK04.json create mode 100755 VisRecall/merged/qa/treasuryK05_2.json create mode 100755 VisRecall/merged/qa/treasuryL01.json create mode 100755 VisRecall/merged/qa/treasuryL02_1.json create mode 100755 VisRecall/merged/qa/treasuryL02_2.json create mode 100755 VisRecall/merged/qa/treasuryL03_2.json create mode 100755 VisRecall/merged/qa/treasuryL07_2.json create mode 100755 VisRecall/merged/qa/treasuryL15_2.json create mode 100755 VisRecall/merged/qa/treasuryL16.json create mode 100755 VisRecall/merged/qa/whoB04_1.json create mode 100755 VisRecall/merged/qa/whoB05_1.json create mode 100755 VisRecall/merged/qa/whoB08_1.json create mode 100755 VisRecall/merged/qa/whoB10_1.json create mode 100755 VisRecall/merged/qa/whoB11_1.json create mode 100755 VisRecall/merged/qa/whoB13_1.json create mode 100755 VisRecall/merged/qa/whoB13_2.json create mode 100755 VisRecall/merged/qa/whoB14_1.json create mode 100755 VisRecall/merged/qa/whoB17_1.json create mode 100755 VisRecall/merged/qa/whoB19_1.json create mode 100755 VisRecall/merged/qa/whoB20_1.json create mode 100755 VisRecall/merged/qa/whoB22_1.json create mode 100755 VisRecall/merged/qa/whoB24_1.json create mode 100755 VisRecall/merged/qa/whoB25_1.json create mode 100755 VisRecall/merged/qa/whoB26_1.json create mode 100755 VisRecall/merged/qa/whoB34_1.json create mode 100755 VisRecall/merged/qa/whoB36_1.json create mode 100755 VisRecall/merged/qa/whoC02_2.json create mode 100755 VisRecall/merged/qa/whoC13.json create mode 100755 VisRecall/merged/qa/whoC22.json create mode 100755 VisRecall/merged/qa/whoF03.json create mode 100755 VisRecall/merged/qa/whoF06.json create mode 100755 VisRecall/merged/qa/whoF15.json create mode 100755 VisRecall/merged/qa/whoH01_1.json create mode 100755 VisRecall/merged/qa/whoH12_1.json create mode 100755 VisRecall/merged/qa/whoH13_3.json create mode 100755 VisRecall/merged/qa/whoI09_1.json create mode 100755 VisRecall/merged/qa/whoJ01_1.json create mode 100755 VisRecall/merged/qa/whoJ10.json create mode 100755 VisRecall/merged/qa/whoJ13_1.json create mode 100755 VisRecall/merged/qa/whoJ22_1.json create mode 100755 VisRecall/merged/qa/whoJ23.json create mode 100755 VisRecall/merged/qa/whoJ24_1.json create mode 100755 VisRecall/merged/qa/whoJ24_2.json create mode 100755 VisRecall/merged/qa/whoJ33.json create mode 100755 VisRecall/merged/qa/whoJ36_2.json create mode 100755 VisRecall/merged/qa/whoJ38_2.json create mode 100755 VisRecall/merged/qa/whoJ40_2.json create mode 100755 VisRecall/merged/qa/whoJ43_1.json create mode 100755 VisRecall/merged/qa/whoJ44.json create mode 100755 VisRecall/merged/qa/whoJ46_1.json create mode 100755 VisRecall/merged/qa/whoK01.json create mode 100755 VisRecall/merged/qa/whoK04_1.json create mode 100755 VisRecall/merged/qa/whoK06_2.json create mode 100755 VisRecall/merged/qa/whoK08.json create mode 100755 VisRecall/merged/qa/whoK21.json create mode 100755 VisRecall/merged/qa/whoL05.json create mode 100644 VisRecall/merged/qa/whoL06.json create mode 100755 VisRecall/merged/qa/whoM01.json create mode 100755 VisRecall/merged/qa/whoM05.json create mode 100755 VisRecall/merged/qa/whoN06_1.json create mode 100755 VisRecall/merged/qa/whoN19_1.json create mode 100755 VisRecall/merged/qa/whoN27.json create mode 100755 VisRecall/merged/qa/whoN32_1.json create mode 100755 VisRecall/merged/qa/whoN35_1.json create mode 100755 VisRecall/merged/qa/whoN36.json create mode 100755 VisRecall/merged/qa/whoO15.json create mode 100755 VisRecall/merged/qa/whoO22_3.json create mode 100755 VisRecall/merged/qa/whoQ01.json create mode 100755 VisRecall/merged/qa/whoQ06_2.json create mode 100755 VisRecall/merged/qa/whoQ12_2.json create mode 100755 VisRecall/merged/qa/whoQ42_1.json create mode 100755 VisRecall/merged/qa/whoQ51_1.json create mode 100755 VisRecall/merged/qa/wsj107.json create mode 100755 VisRecall/merged/qa/wsj11.json create mode 100755 VisRecall/merged/qa/wsj128.json create mode 100755 VisRecall/merged/qa/wsj135.json create mode 100755 VisRecall/merged/qa/wsj151.json create mode 100755 VisRecall/merged/qa/wsj168.json create mode 100755 VisRecall/merged/qa/wsj180.json create mode 100755 VisRecall/merged/qa/wsj265.json create mode 100755 VisRecall/merged/qa/wsj277.json create mode 100755 VisRecall/merged/qa/wsj3.json create mode 100755 VisRecall/merged/qa/wsj320.json create mode 100755 VisRecall/merged/qa/wsj340.json create mode 100755 VisRecall/merged/qa/wsj342.json create mode 100755 VisRecall/merged/qa/wsj553.json create mode 100755 VisRecall/merged/qa/wsj56.json create mode 100755 VisRecall/merged/qa/wsj593.json create mode 100755 VisRecall/merged/qa/wsj60.json create mode 100755 VisRecall/merged/qa/wsj72.json create mode 100755 VisRecall/merged/qa/wsj76.json create mode 100755 VisRecall/merged/qa/wsj8.json create mode 100755 VisRecall/merged/qa/wsj86.json create mode 100755 VisRecall/merged/qa/wsj88.json create mode 100644 VisRecall/merged/src/02wEIH1uspxsk1E7VW-KRA==.0.png create mode 100644 VisRecall/merged/src/0BmWZbQdEukHi79Lit01oQ==.0.png create mode 100644 VisRecall/merged/src/0Gc4n4lYDn4V19CtJzo_eg==.0.png create mode 100644 VisRecall/merged/src/0yflU4o2ze89IvWqYRKGKA==.0.png create mode 100644 VisRecall/merged/src/129462.png create mode 100644 VisRecall/merged/src/129470.png create mode 100644 VisRecall/merged/src/143.png create mode 100644 VisRecall/merged/src/168.png create mode 100644 VisRecall/merged/src/1EMgXSmCnY1PeksJZMhlHA==.0.png create mode 100644 VisRecall/merged/src/1JwHfqlSB3z3qu78N-3Law==.0.png create mode 100644 VisRecall/merged/src/1_WnR3D8lP-2AK6XsHM74Q==.0.png create mode 100644 VisRecall/merged/src/1tVCmxZoFO6hq5H_rC0j_w==.0.png create mode 100644 VisRecall/merged/src/2K-S52z1bcV0xQD4mnuCbw==.0.jpg create mode 100644 VisRecall/merged/src/2yyamO0gVGUftCeTJ9WU2Q==.0.png create mode 100644 VisRecall/merged/src/3LY3OX8bU7uKhgcRPgDRxw==.0.png create mode 100644 VisRecall/merged/src/3PuDl5gc8C7FWTFXB8kmqw==.0.png create mode 100644 VisRecall/merged/src/3iRYXLvZ8oVQDMLR-CebnQ==.0.png create mode 100644 VisRecall/merged/src/3lG2Suf1vlUNqfO9pvq1kw.0.png create mode 100644 VisRecall/merged/src/4bm2MTzbrTpK41Fhy3Oh2g==.0.png create mode 100644 VisRecall/merged/src/4dCSXyCVYOxhf_SLYhGkIw==.0.png create mode 100644 VisRecall/merged/src/79027.png create mode 100644 VisRecall/merged/src/79359.png create mode 100644 VisRecall/merged/src/8XT9tstaX3P7OjmkeT1xTg==.0.png create mode 100644 VisRecall/merged/src/JVoKAJWwEgervxjbg2tqMA==.0.jpg create mode 100644 VisRecall/merged/src/_1IiNGPpj1s86KzEjQ93YQ==.0.jpg create mode 100644 VisRecall/merged/src/_Di4yk2H64QEBkEncRGMhg==.0.png create mode 100644 VisRecall/merged/src/_Fbq9iW1SCuAYaHmYUXAUA==.0.jpg create mode 100644 VisRecall/merged/src/__uID4lztqrYTniGMJdDWQ.0.jpg create mode 100644 VisRecall/merged/src/__uID4lztqrYTniGMJdDWQ.0.png create mode 100644 VisRecall/merged/src/economist_daily_chart_100.png create mode 100644 VisRecall/merged/src/economist_daily_chart_127.png create mode 100644 VisRecall/merged/src/economist_daily_chart_137.png create mode 100644 VisRecall/merged/src/economist_daily_chart_145.png create mode 100644 VisRecall/merged/src/economist_daily_chart_150.png create mode 100644 VisRecall/merged/src/economist_daily_chart_162.png create mode 100644 VisRecall/merged/src/economist_daily_chart_184.png create mode 100644 VisRecall/merged/src/economist_daily_chart_189.png create mode 100644 VisRecall/merged/src/economist_daily_chart_191.png create mode 100644 VisRecall/merged/src/economist_daily_chart_194.png create mode 100644 VisRecall/merged/src/economist_daily_chart_197.png create mode 100644 VisRecall/merged/src/economist_daily_chart_198.png create mode 100644 VisRecall/merged/src/economist_daily_chart_20.png create mode 100644 VisRecall/merged/src/economist_daily_chart_200.png create mode 100644 VisRecall/merged/src/economist_daily_chart_202.png create mode 100644 VisRecall/merged/src/economist_daily_chart_203.png create mode 100644 VisRecall/merged/src/economist_daily_chart_206.png create mode 100644 VisRecall/merged/src/economist_daily_chart_207.png create mode 100644 VisRecall/merged/src/economist_daily_chart_208.png create mode 100644 VisRecall/merged/src/economist_daily_chart_209.png create mode 100644 VisRecall/merged/src/economist_daily_chart_211.png create mode 100644 VisRecall/merged/src/economist_daily_chart_215.png create mode 100644 VisRecall/merged/src/economist_daily_chart_218.png create mode 100644 VisRecall/merged/src/economist_daily_chart_223.png create mode 100644 VisRecall/merged/src/economist_daily_chart_225.png create mode 100644 VisRecall/merged/src/economist_daily_chart_229.png create mode 100644 VisRecall/merged/src/economist_daily_chart_235.png create mode 100644 VisRecall/merged/src/economist_daily_chart_236.png create mode 100644 VisRecall/merged/src/economist_daily_chart_238.png create mode 100644 VisRecall/merged/src/economist_daily_chart_242.png create mode 100644 VisRecall/merged/src/economist_daily_chart_243.png create mode 100644 VisRecall/merged/src/economist_daily_chart_244.png create mode 100644 VisRecall/merged/src/economist_daily_chart_247.png create mode 100644 VisRecall/merged/src/economist_daily_chart_250.png create mode 100644 VisRecall/merged/src/economist_daily_chart_253.png create mode 100644 VisRecall/merged/src/economist_daily_chart_257.png create mode 100644 VisRecall/merged/src/economist_daily_chart_260.png create mode 100644 VisRecall/merged/src/economist_daily_chart_262.png create mode 100644 VisRecall/merged/src/economist_daily_chart_264.png create mode 100644 VisRecall/merged/src/economist_daily_chart_267.png create mode 100644 VisRecall/merged/src/economist_daily_chart_308.png create mode 100644 VisRecall/merged/src/economist_daily_chart_319.png create mode 100644 VisRecall/merged/src/economist_daily_chart_336.png create mode 100644 VisRecall/merged/src/economist_daily_chart_355.png create mode 100644 VisRecall/merged/src/economist_daily_chart_376.png create mode 100644 VisRecall/merged/src/economist_daily_chart_377.png create mode 100644 VisRecall/merged/src/economist_daily_chart_384.png create mode 100644 VisRecall/merged/src/economist_daily_chart_387.png create mode 100644 VisRecall/merged/src/economist_daily_chart_420.png create mode 100644 VisRecall/merged/src/economist_daily_chart_441.png create mode 100644 VisRecall/merged/src/economist_daily_chart_447.png create mode 100644 VisRecall/merged/src/economist_daily_chart_451.png create mode 100644 VisRecall/merged/src/economist_daily_chart_473.png create mode 100644 VisRecall/merged/src/economist_daily_chart_513.png create mode 100644 VisRecall/merged/src/economist_daily_chart_523.png create mode 100644 VisRecall/merged/src/economist_daily_chart_531.png create mode 100644 VisRecall/merged/src/economist_daily_chart_532.png create mode 100644 VisRecall/merged/src/economist_daily_chart_65.png create mode 100644 VisRecall/merged/src/economist_daily_chart_76.png create mode 100644 VisRecall/merged/src/economist_daily_chart_77.png create mode 100644 VisRecall/merged/src/economist_daily_chart_84.png create mode 100644 VisRecall/merged/src/economist_daily_chart_93.png create mode 100644 VisRecall/merged/src/economist_daily_chart_95.png create mode 100644 VisRecall/merged/src/treasuryA8.png create mode 100644 VisRecall/merged/src/treasuryB02.png create mode 100644 VisRecall/merged/src/treasuryB06.png create mode 100644 VisRecall/merged/src/treasuryB13.png create mode 100644 VisRecall/merged/src/treasuryD05_2.png create mode 100644 VisRecall/merged/src/treasuryD07_3.png create mode 100644 VisRecall/merged/src/treasuryD10.png create mode 100644 VisRecall/merged/src/treasuryG01_2.png create mode 100644 VisRecall/merged/src/treasuryI01_1.png create mode 100644 VisRecall/merged/src/treasuryI02_1.png create mode 100644 VisRecall/merged/src/treasuryI02_3.png create mode 100644 VisRecall/merged/src/treasuryJ01_2.png create mode 100644 VisRecall/merged/src/treasuryJ02_2.png create mode 100644 VisRecall/merged/src/treasuryJ03_3.png create mode 100644 VisRecall/merged/src/treasuryK03_3.png create mode 100644 VisRecall/merged/src/treasuryK04.png create mode 100644 VisRecall/merged/src/treasuryK05_2.png create mode 100644 VisRecall/merged/src/treasuryL01.png create mode 100644 VisRecall/merged/src/treasuryL02_1.png create mode 100644 VisRecall/merged/src/treasuryL02_2.png create mode 100644 VisRecall/merged/src/treasuryL03_2.png create mode 100644 VisRecall/merged/src/treasuryL07_2.png create mode 100644 VisRecall/merged/src/treasuryL15_2.png create mode 100644 VisRecall/merged/src/treasuryL16.png create mode 100644 VisRecall/merged/src/whoB04_1.png create mode 100644 VisRecall/merged/src/whoB05_1.png create mode 100644 VisRecall/merged/src/whoB08_1.png create mode 100644 VisRecall/merged/src/whoB10_1.png create mode 100644 VisRecall/merged/src/whoB11_1.png create mode 100644 VisRecall/merged/src/whoB13_1.png create mode 100644 VisRecall/merged/src/whoB13_2.png create mode 100644 VisRecall/merged/src/whoB14_1.png create mode 100644 VisRecall/merged/src/whoB17_1.png create mode 100644 VisRecall/merged/src/whoB19_1.png create mode 100644 VisRecall/merged/src/whoB20_1.png create mode 100644 VisRecall/merged/src/whoB22_1.png create mode 100644 VisRecall/merged/src/whoB24_1.png create mode 100644 VisRecall/merged/src/whoB25_1.png create mode 100644 VisRecall/merged/src/whoB26_1.png create mode 100644 VisRecall/merged/src/whoB34_1.png create mode 100644 VisRecall/merged/src/whoB36_1.png create mode 100644 VisRecall/merged/src/whoC02_2.png create mode 100644 VisRecall/merged/src/whoC13.png create mode 100644 VisRecall/merged/src/whoC22.png create mode 100644 VisRecall/merged/src/whoF03.png create mode 100644 VisRecall/merged/src/whoF06.png create mode 100644 VisRecall/merged/src/whoF15.png create mode 100644 VisRecall/merged/src/whoH01_1.png create mode 100644 VisRecall/merged/src/whoH12_1.png create mode 100644 VisRecall/merged/src/whoH13_3.png create mode 100644 VisRecall/merged/src/whoI09_1.png create mode 100644 VisRecall/merged/src/whoJ01_1.png create mode 100644 VisRecall/merged/src/whoJ10.png create mode 100644 VisRecall/merged/src/whoJ13_1.png create mode 100644 VisRecall/merged/src/whoJ22_1.png create mode 100644 VisRecall/merged/src/whoJ23.png create mode 100644 VisRecall/merged/src/whoJ24_1.png create mode 100644 VisRecall/merged/src/whoJ24_2.png create mode 100644 VisRecall/merged/src/whoJ33.png create mode 100644 VisRecall/merged/src/whoJ36_2.png create mode 100644 VisRecall/merged/src/whoJ38_2.png create mode 100644 VisRecall/merged/src/whoJ40_2.png create mode 100644 VisRecall/merged/src/whoJ43_1.png create mode 100644 VisRecall/merged/src/whoJ44.png create mode 100644 VisRecall/merged/src/whoJ46_1.png create mode 100644 VisRecall/merged/src/whoK01.png create mode 100644 VisRecall/merged/src/whoK04_1.png create mode 100644 VisRecall/merged/src/whoK06_2.png create mode 100644 VisRecall/merged/src/whoK08.png create mode 100644 VisRecall/merged/src/whoK21.png create mode 100644 VisRecall/merged/src/whoL05.png create mode 100644 VisRecall/merged/src/whoL06.png create mode 100644 VisRecall/merged/src/whoM01.png create mode 100644 VisRecall/merged/src/whoM05.png create mode 100644 VisRecall/merged/src/whoN06_1.png create mode 100644 VisRecall/merged/src/whoN19_1.png create mode 100644 VisRecall/merged/src/whoN27.png create mode 100644 VisRecall/merged/src/whoN32_1.png create mode 100644 VisRecall/merged/src/whoN35_1.png create mode 100644 VisRecall/merged/src/whoN36.png create mode 100644 VisRecall/merged/src/whoO15.png create mode 100644 VisRecall/merged/src/whoO22_3.png create mode 100644 VisRecall/merged/src/whoQ01.png create mode 100644 VisRecall/merged/src/whoQ06_2.png create mode 100644 VisRecall/merged/src/whoQ12_2.png create mode 100644 VisRecall/merged/src/whoQ42_1.png create mode 100644 VisRecall/merged/src/whoQ51_1.png create mode 100644 VisRecall/merged/src/wsj107.png create mode 100644 VisRecall/merged/src/wsj11.png create mode 100644 VisRecall/merged/src/wsj128.png create mode 100644 VisRecall/merged/src/wsj135.png create mode 100644 VisRecall/merged/src/wsj151.png create mode 100644 VisRecall/merged/src/wsj168.png create mode 100644 VisRecall/merged/src/wsj180.png create mode 100644 VisRecall/merged/src/wsj265.png create mode 100644 VisRecall/merged/src/wsj277.png create mode 100644 VisRecall/merged/src/wsj3.png create mode 100644 VisRecall/merged/src/wsj320.png create mode 100644 VisRecall/merged/src/wsj340.png create mode 100644 VisRecall/merged/src/wsj342.png create mode 100644 VisRecall/merged/src/wsj553.png create mode 100644 VisRecall/merged/src/wsj56.png create mode 100644 VisRecall/merged/src/wsj593.png create mode 100644 VisRecall/merged/src/wsj60.png create mode 100644 VisRecall/merged/src/wsj72.png create mode 100644 VisRecall/merged/src/wsj76.png create mode 100644 VisRecall/merged/src/wsj8.png create mode 100644 VisRecall/merged/src/wsj86.png create mode 100644 VisRecall/merged/src/wsj88.png create mode 100755 VisRecall/training_data/F-question/train_split0.npy create mode 100755 VisRecall/training_data/F-question/train_split1.npy create mode 100755 VisRecall/training_data/F-question/train_split2.npy create mode 100755 VisRecall/training_data/F-question/train_split3.npy create mode 100755 VisRecall/training_data/F-question/train_split4.npy create mode 100755 VisRecall/training_data/F-question/training.npy create mode 100755 VisRecall/training_data/F-question/val_split0.npy create mode 100755 VisRecall/training_data/F-question/val_split1.npy create mode 100755 VisRecall/training_data/F-question/val_split2.npy create mode 100755 VisRecall/training_data/F-question/val_split3.npy create mode 100755 VisRecall/training_data/F-question/val_split4.npy create mode 100755 VisRecall/training_data/FE-question/train_split0.npy create mode 100755 VisRecall/training_data/FE-question/train_split1.npy create mode 100755 VisRecall/training_data/FE-question/train_split2.npy create mode 100755 VisRecall/training_data/FE-question/train_split3.npy create mode 100755 VisRecall/training_data/FE-question/train_split4.npy create mode 100755 VisRecall/training_data/FE-question/training.npy create mode 100755 VisRecall/training_data/FE-question/val_split0.npy create mode 100755 VisRecall/training_data/FE-question/val_split1.npy create mode 100755 VisRecall/training_data/FE-question/val_split2.npy create mode 100755 VisRecall/training_data/FE-question/val_split3.npy create mode 100755 VisRecall/training_data/FE-question/val_split4.npy create mode 100755 VisRecall/training_data/RV-question/train_split0.npy create mode 100755 VisRecall/training_data/RV-question/train_split1.npy create mode 100755 VisRecall/training_data/RV-question/train_split2.npy create mode 100755 VisRecall/training_data/RV-question/train_split3.npy create mode 100755 VisRecall/training_data/RV-question/train_split4.npy create mode 100755 VisRecall/training_data/RV-question/training.npy create mode 100755 VisRecall/training_data/RV-question/val_split0.npy create mode 100755 VisRecall/training_data/RV-question/val_split1.npy create mode 100755 VisRecall/training_data/RV-question/val_split2.npy create mode 100755 VisRecall/training_data/RV-question/val_split3.npy create mode 100755 VisRecall/training_data/RV-question/val_split4.npy create mode 100755 VisRecall/training_data/T-question/train_split0.npy create mode 100755 VisRecall/training_data/T-question/train_split1.npy create mode 100755 VisRecall/training_data/T-question/train_split2.npy create mode 100755 VisRecall/training_data/T-question/train_split3.npy create mode 100755 VisRecall/training_data/T-question/train_split4.npy create mode 100755 VisRecall/training_data/T-question/training.npy create mode 100755 VisRecall/training_data/T-question/val_split0.npy create mode 100755 VisRecall/training_data/T-question/val_split1.npy create mode 100755 VisRecall/training_data/T-question/val_split2.npy create mode 100755 VisRecall/training_data/T-question/val_split3.npy create mode 100755 VisRecall/training_data/T-question/val_split4.npy create mode 100755 VisRecall/training_data/U-question/train_split0.npy create mode 100755 VisRecall/training_data/U-question/train_split1.npy create mode 100755 VisRecall/training_data/U-question/train_split2.npy create mode 100755 VisRecall/training_data/U-question/train_split3.npy create mode 100755 VisRecall/training_data/U-question/train_split4.npy create mode 100755 VisRecall/training_data/U-question/training.npy create mode 100755 VisRecall/training_data/U-question/val_split0.npy create mode 100755 VisRecall/training_data/U-question/val_split1.npy create mode 100755 VisRecall/training_data/U-question/val_split2.npy create mode 100755 VisRecall/training_data/U-question/val_split3.npy create mode 100755 VisRecall/training_data/U-question/val_split4.npy create mode 100755 VisRecall/training_data/all/training_group1.npy create mode 100755 VisRecall/training_data/all/training_group10.npy create mode 100755 VisRecall/training_data/all/training_group2.npy create mode 100755 VisRecall/training_data/all/training_group3.npy create mode 100755 VisRecall/training_data/all/training_group4.npy create mode 100755 VisRecall/training_data/all/training_group5.npy create mode 100755 VisRecall/training_data/all/training_group6.npy create mode 100755 VisRecall/training_data/all/training_group7.npy create mode 100755 VisRecall/training_data/all/training_group8.npy create mode 100755 VisRecall/training_data/all/training_group9.npy diff --git a/README.md b/README.md new file mode 100644 index 0000000..0f23162 --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +# VisRecall: Quantifying Information Visualisation Recallability via Question Answering + +*Yao Wang, Chuhan Jiao(Aalto University), Mihai Bâce and Andreas Bulling* + +submitted to The IEEE Transactions on Visualization and Computer Graphics (TVCG2022) + +This repository contains the dataset and models for predicting visualisation recallability. + +``` +$Root Directory +│ +│─ README.md —— this file +│ +|─ RecallNet —— Source code of the network to predict infovis recallability +│ │ +│ │─ environment.yaml —— conda environments +│ │ +│ │─ notebooks +│ │ │ +│ │ │─ train_RecallNet.ipynb —— main notebook for training and validation +│ │ │ +│ │ └─ massvis_recall.json —— saved recallability scores for MASSVIS dataset +│ │ +│ └─ src +│ │ +│ │─ singleduration_models.py —— RecallNet model +│ │ +│ │─ sal_imp_utilities.py —— image processing utilities +│ │ +│ │─ losses_keras2.py —— loss functions +│ │ +│ ... +│ +└─ VisRecall —— The dataset + │ + │─ answer_raw —— raw answers from AMT workers + │ + │─ merged + │ │ + │ │─ src —— original images + │ │ + │ │─ qa —— question annotations + │ │ + │ └─ image_annotation —— other metadata annotations + │ + └─ training_data + │ + │─ all —— all averaged questions + │ + └─ X-question —— a specific type of question (T-, FE-, F-, RV-, U-) +``` + + +contact: yao.wang@vis.uni-stuttgart.de \ No newline at end of file diff --git a/RecallNet/environment.yaml b/RecallNet/environment.yaml new file mode 100644 index 0000000..e5fc038 --- /dev/null +++ b/RecallNet/environment.yaml @@ -0,0 +1,160 @@ +name: tf-cuda9 +channels: + - conda-forge + - defaults +dependencies: + - _libgcc_mutex=0.1=main + - _tflow_select=2.1.0=gpu + - absl-py=0.11.0=py37h06a4308_0 + - argon2-cffi=20.1.0=py37h8f50634_2 + - astor=0.8.1=py37_0 + - async_generator=1.10=py_0 + - attrs=20.2.0=pyh9f0ad1d_0 + - backports=1.0=py_2 + - backports.functools_lru_cache=1.6.1=py_0 + - blas=1.0=mkl + - bleach=3.2.1=pyh9f0ad1d_0 + - c-ares=1.16.1=h7b6447c_0 + - ca-certificates=2021.4.13=h06a4308_1 + - certifi=2020.12.5=py37h06a4308_0 + - cffi=1.14.3=py37he30daa8_0 + - cudatoolkit=9.0=h13b8566_0 + - cudnn=7.3.1=cuda9.0_0 + - cupti=9.0.176=0 + - decorator=4.4.2=py_0 + - defusedxml=0.6.0=py_0 + - entrypoints=0.3=py37hc8dfbb8_1002 + - gast=0.4.0=py_0 + - google-pasta=0.2.0=py_0 + - grpcio=1.31.0=py37hf8bcb03_0 + - h5py=2.10.0=py37hd6299e0_1 + - hdf5=1.10.6=hb1b8bf9_0 + - importlib-metadata=2.0.0=py_1 + - importlib_metadata=2.0.0=1 + - intel-openmp=2020.2=254 + - ipykernel=5.3.4=py37hc6149b9_1 + - ipython=5.8.0=py37_1 + - ipython_genutils=0.2.0=py_1 + - ipywidgets=7.5.1=pyh9f0ad1d_1 + - jinja2=2.11.2=pyh9f0ad1d_0 + - jsonschema=3.2.0=py_2 + - jupyter_client=6.1.7=py_0 + - jupyter_core=4.6.3=py37hc8dfbb8_2 + - jupyterlab_pygments=0.1.2=pyh9f0ad1d_0 + - keras=2.3.1=0 + - keras-applications=1.0.8=py_1 + - keras-base=2.3.1=py37_0 + - keras-preprocessing=1.1.0=py_1 + - ld_impl_linux-64=2.33.1=h53a641e_7 + - libedit=3.1.20191231=h14c3975_1 + - libffi=3.3=he6710b0_2 + - libgcc-ng=9.1.0=hdf63c60_0 + - libgfortran-ng=7.3.0=hdf63c60_0 + - libprotobuf=3.13.0.1=hd408876_0 + - libsodium=1.0.18=h516909a_1 + - libstdcxx-ng=9.1.0=hdf63c60_0 + - markdown=3.3.2=py37_0 + - markupsafe=1.1.1=py37hb5d75c8_2 + - mistune=0.8.4=py37h8f50634_1002 + - mkl=2020.2=256 + - mkl-service=2.3.0=py37he904b0f_0 + - mkl_fft=1.2.0=py37h23d657b_0 + - mkl_random=1.1.1=py37h0573a6f_0 + - nbclient=0.5.1=py_0 + - nbconvert=6.0.7=py37hc8dfbb8_2 + - nbformat=5.0.8=py_0 + - ncurses=6.2=he6710b0_1 + - nest-asyncio=1.4.1=py_0 + - notebook=6.1.4=py37hc8dfbb8_1 + - numpy=1.19.2=py37h54aff64_0 + - numpy-base=1.19.2=py37hfa32c7d_0 + - openssl=1.1.1k=h27cfd23_0 + - packaging=20.4=pyh9f0ad1d_0 + - pandoc=2.11.0.4=hd18ef5c_0 + - pandocfilters=1.4.2=py_1 + - pexpect=4.8.0=pyh9f0ad1d_2 + - pickleshare=0.7.5=py_1003 + - pip=20.2.4=py37_0 + - prometheus_client=0.8.0=pyh9f0ad1d_0 + - prompt_toolkit=1.0.15=py_1 + - protobuf=3.13.0.1=py37he6710b0_1 + - ptyprocess=0.6.0=py_1001 + - pycparser=2.20=pyh9f0ad1d_2 + - pygments=2.7.2=py_0 + - pyparsing=2.4.7=pyh9f0ad1d_0 + - pyrsistent=0.17.3=py37h8f50634_1 + - python=3.7.9=h7579374_0 + - python-dateutil=2.8.1=py_0 + - python_abi=3.7=1_cp37m + - pyyaml=5.3.1=py37h7b6447c_1 + - pyzmq=19.0.2=py37hac76be4_2 + - readline=8.0=h7b6447c_0 + - send2trash=1.5.0=py_0 + - setuptools=50.3.0=py37hb0f4dca_1 + - simplegeneric=0.8.1=py_1 + - six=1.15.0=py_0 + - sqlite=3.33.0=h62c20be_0 + - tensorboard=1.14.0=py37hf484d3e_0 + - tensorflow=1.14.0=gpu_py37hae64822_0 + - tensorflow-base=1.14.0=gpu_py37h8f37b9b_0 + - tensorflow-estimator=1.14.0=py_0 + - tensorflow-gpu=1.14.0=h0d30ee6_0 + - termcolor=1.1.0=py37_1 + - terminado=0.9.1=py37hc8dfbb8_1 + - testpath=0.4.4=py_0 + - tk=8.6.10=hbc83047_0 + - tornado=6.0.4=py37h8f50634_2 + - traitlets=5.0.5=py_0 + - wcwidth=0.2.5=pyh9f0ad1d_2 + - webencodings=0.5.1=py_1 + - werkzeug=1.0.1=py_0 + - wheel=0.35.1=py_0 + - widgetsnbextension=3.5.1=py37hc8dfbb8_4 + - wrapt=1.12.1=py37h7b6447c_1 + - xz=5.2.5=h7b6447c_0 + - yaml=0.2.5=h7b6447c_0 + - zeromq=4.3.3=he1b5a44_2 + - zipp=3.4.0=pyhd3eb1b0_0 + - zlib=1.2.11=h7b6447c_3 + - pip: + - adjusttext==0.7.3 + - alignment==0.0.1 + - chardet==4.0.0 + - cmasher==1.6.2 + - colorspacious==1.1.2 + - cycler==0.10.0 + - e13tools==0.9.6 + - editdistance==0.5.3 + - fastdtw==0.3.4 + - idna==2.10 + - imageio==2.9.0 + - joblib==1.0.0 + - kiwisolver==1.2.0 + - mat4py==0.5.0 + - matplotlib==3.4.3 + - natsort==7.1.1 + - networkx==2.5 + - opencv-python==4.4.0.44 + - pandas==1.2.1 + - patsy==0.5.1 + - pillow==8.0.1 + - pytz==2021.1 + - pywavelets==1.1.1 + - requests==2.25.1 + - researchpy==0.3.2 + - salicon==1.0 + - scikit-image==0.18.1 + - scikit-learn==0.24.1 + - scipy==1.2.0 + - seaborn==0.11.1 + - simplejson==3.17.5 + - sklearn==0.0 + - spotlight==2.3.1 + - statsmodels==0.12.2 + - threadpoolctl==2.1.0 + - tifffile==2021.3.17 + - tqdm==4.51.0 + - urllib3==1.26.4 + - wget==3.2 +prefix: /netpool/homes/wangyo/.conda/envs/tf-cuda9 + diff --git a/RecallNet/notebooks/.ipynb_checkpoints/train_RecallNet-checkpoint.ipynb b/RecallNet/notebooks/.ipynb_checkpoints/train_RecallNet-checkpoint.ipynb new file mode 100644 index 0000000..c6f2d5c --- /dev/null +++ b/RecallNet/notebooks/.ipynb_checkpoints/train_RecallNet-checkpoint.ipynb @@ -0,0 +1,984 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using TensorFlow backend.\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:516: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:517: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:518: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:519: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:520: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:525: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:541: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:542: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:543: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:544: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:545: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:550: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import keras\n", + "import sys\n", + "import os, glob\n", + "from keras.models import Model\n", + "import tensorflow as tf\n", + "from keras.utils import Sequence\n", + "from keras.optimizers import Adam\n", + "from keras.callbacks import ModelCheckpoint, LearningRateScheduler\n", + "#from IPython.display import clear_output\n", + "import tqdm \n", + "import math\n", + "\n", + "sys.path.append('../src')\n", + "\n", + "from util import get_model_by_name\n", + "\n", + "from sal_imp_utilities import *\n", + "from cb import InteractivePlot\n", + "\n", + "config = tf.ConfigProto()\n", + "config.gpu_options.allow_growth = True\n", + "sess = tf.Session(config=config)\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mon May 9 14:23:41 2022 \n", + "+-----------------------------------------------------------------------------+\n", + "| NVIDIA-SMI 470.103.01 Driver Version: 470.103.01 CUDA Version: 11.4 |\n", + "|-------------------------------+----------------------+----------------------+\n", + "| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n", + "| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n", + "| | | MIG M. |\n", + "|===============================+======================+======================|\n", + "| 0 NVIDIA GeForce ... Off | 00000000:29:00.0 On | N/A |\n", + "| 30% 41C P2 38W / 184W | 975MiB / 7959MiB | 5% Default |\n", + "| | | N/A |\n", + "+-------------------------------+----------------------+----------------------+\n", + " \n", + "+-----------------------------------------------------------------------------+\n", + "| Processes: |\n", + "| GPU GI CI PID Type Process name GPU Memory |\n", + "| ID ID Usage |\n", + "|=============================================================================|\n", + "| 0 N/A N/A 1377 G /usr/lib/xorg/Xorg 95MiB |\n", + "| 0 N/A N/A 2243 G /usr/lib/xorg/Xorg 432MiB |\n", + "| 0 N/A N/A 2378 G /usr/bin/gnome-shell 72MiB |\n", + "| 0 N/A N/A 3521 G ...AAAAAAAAA= --shared-files 16MiB |\n", + "| 0 N/A N/A 5912 G ...RendererForSitePerProcess 103MiB |\n", + "| 0 N/A N/A 18975 G ...sktop/bin/mendeleydesktop 42MiB |\n", + "| 0 N/A N/A 168057 G ...178058406726361824,131072 78MiB |\n", + "| 0 N/A N/A 178813 C .../envs/tf-cuda9/bin/python 87MiB |\n", + "+-----------------------------------------------------------------------------+\n" + ] + } + ], + "source": [ + "%%bash\n", + "nvidia-smi" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'0'" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.environ[\"CUDA_VISIBLE_DEVICES\"] = '0'\n", + "os.environ[\"CUDA_VISIBLE_DEVICES\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ENV" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "data_path = '/your/path/VisRecall/'\n", + "# 0: T, 1: FE, 2: F, 3: RV, 4: U\n", + "TYPE = 0\n", + "split = 0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Load data" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "TYPE_Q = ['T','FE','F','RV','U']\n", + "bp_imp = data_path + 'merged/src/'\n", + "training_set = np.load(data_path + 'training_data/%s-question/train_split%d.npy'%(TYPE_Q[TYPE], split),allow_pickle=True)\n", + "val_set = np.load(data_path + 'training_data/%s-question/val_split%d.npy'%(TYPE_Q[TYPE], split),allow_pickle=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "train_filename = []\n", + "train_label = []\n", + "train_mean = []\n", + "train_type = []\n", + "\n", + "for data in training_set:\n", + " one_hot = [0,0,0,0,0,0]\n", + " one_hot[data['vistype']] = 1\n", + " train_filename.append(bp_imp+data['name'])\n", + " train_label.append(one_hot)\n", + " train_mean.append(data['norm_mean_acc_withD'])\n", + " train_type.append(data['norm_%d_withD'%(TYPE)])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "val_filename = []\n", + "val_label = []\n", + "val_mean = []\n", + "val_type = []\n", + "for data in val_set:\n", + " one_hot = [0,0,0,0,0,0]\n", + " one_hot[data['vistype']] = 1\n", + " val_filename.append(bp_imp+data['name'])\n", + " val_label.append(one_hot)\n", + " val_mean.append(data['norm_mean_acc_withD'])\n", + " val_type.append(data['norm_%d_withD'%(TYPE)])\n", + "#val_filename" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Model and training params" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# FILL THESE IN: set training parameters \n", + "ckpt_savedir = \"ckpt\"\n", + "\n", + "load_weights = False\n", + "weightspath = \"\"\n", + "\n", + "batch_size = 4\n", + "init_lr = 0.002\n", + "lr_reduce_by = .1\n", + "reduce_at_epoch = 3\n", + "n_epochs = 15\n", + "\n", + "opt = Adam(lr=init_lr) \n", + "\n", + "\n", + "model_name = \"RecallNet_xception\"\n", + "\n", + "model_inp_size = (240, 320)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "input_shape = model_inp_size + (3,)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:From /netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:4070: The name tf.nn.max_pool is deprecated. Please use tf.nn.max_pool2d instead.\n", + "\n", + "xception output shapes: (?, 30, 40, 2048)\n", + "Model: \"model_1\"\n", + "__________________________________________________________________________________________________\n", + "Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + "input_1 (InputLayer) (None, 240, 320, 3) 0 \n", + "__________________________________________________________________________________________________\n", + "block1_conv1 (Conv2D) (None, 119, 159, 32) 864 input_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block1_conv1_bn (BatchNormaliza (None, 119, 159, 32) 128 block1_conv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block1_conv1_act (Activation) (None, 119, 159, 32) 0 block1_conv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block1_conv2 (Conv2D) (None, 117, 157, 64) 18432 block1_conv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block1_conv2_bn (BatchNormaliza (None, 117, 157, 64) 256 block1_conv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block1_conv2_act (Activation) (None, 117, 157, 64) 0 block1_conv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block2_sepconv1 (SeparableConv2 (None, 117, 157, 128 8768 block1_conv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block2_sepconv1_bn (BatchNormal (None, 117, 157, 128 512 block2_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block2_sepconv2_act (Activation (None, 117, 157, 128 0 block2_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block2_sepconv2 (SeparableConv2 (None, 117, 157, 128 17536 block2_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block2_sepconv2_bn (BatchNormal (None, 117, 157, 128 512 block2_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_1 (Conv2D) (None, 59, 79, 128) 8192 block1_conv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block2_pool (MaxPooling2D) (None, 59, 79, 128) 0 block2_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_1 (BatchNor (None, 59, 79, 128) 512 conv2d_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_1 (Add) (None, 59, 79, 128) 0 block2_pool[0][0] \n", + " batch_normalization_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block3_sepconv1_act (Activation (None, 59, 79, 128) 0 add_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block3_sepconv1 (SeparableConv2 (None, 59, 79, 256) 33920 block3_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block3_sepconv1_bn (BatchNormal (None, 59, 79, 256) 1024 block3_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block3_sepconv2_act (Activation (None, 59, 79, 256) 0 block3_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block3_sepconv2 (SeparableConv2 (None, 59, 79, 256) 67840 block3_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block3_sepconv2_bn (BatchNormal (None, 59, 79, 256) 1024 block3_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_2 (Conv2D) (None, 30, 40, 256) 32768 add_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block3_pool (MaxPooling2D) (None, 30, 40, 256) 0 block3_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_2 (BatchNor (None, 30, 40, 256) 1024 conv2d_2[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_2 (Add) (None, 30, 40, 256) 0 block3_pool[0][0] \n", + " batch_normalization_2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block4_sepconv1_act (Activation (None, 30, 40, 256) 0 add_2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block4_sepconv1 (SeparableConv2 (None, 30, 40, 728) 188672 block4_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block4_sepconv1_bn (BatchNormal (None, 30, 40, 728) 2912 block4_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block4_sepconv2_act (Activation (None, 30, 40, 728) 0 block4_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block4_sepconv2 (SeparableConv2 (None, 30, 40, 728) 536536 block4_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block4_sepconv2_bn (BatchNormal (None, 30, 40, 728) 2912 block4_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_3 (Conv2D) (None, 30, 40, 728) 186368 add_2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block4_pool (MaxPooling2D) (None, 30, 40, 728) 0 block4_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_3 (BatchNor (None, 30, 40, 728) 2912 conv2d_3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_3 (Add) (None, 30, 40, 728) 0 block4_pool[0][0] \n", + " batch_normalization_3[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv1_act (Activation (None, 30, 40, 728) 0 add_3[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv1 (SeparableConv2 (None, 30, 40, 728) 536536 block5_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv1_bn (BatchNormal (None, 30, 40, 728) 2912 block5_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv2_act (Activation (None, 30, 40, 728) 0 block5_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv2 (SeparableConv2 (None, 30, 40, 728) 536536 block5_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv2_bn (BatchNormal (None, 30, 40, 728) 2912 block5_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv3_act (Activation (None, 30, 40, 728) 0 block5_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv3 (SeparableConv2 (None, 30, 40, 728) 536536 block5_sepconv3_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv3_bn (BatchNormal (None, 30, 40, 728) 2912 block5_sepconv3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_4 (Add) (None, 30, 40, 728) 0 block5_sepconv3_bn[0][0] \n", + " add_3[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv1_act (Activation (None, 30, 40, 728) 0 add_4[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv1 (SeparableConv2 (None, 30, 40, 728) 536536 block6_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv1_bn (BatchNormal (None, 30, 40, 728) 2912 block6_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv2_act (Activation (None, 30, 40, 728) 0 block6_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv2 (SeparableConv2 (None, 30, 40, 728) 536536 block6_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv2_bn (BatchNormal (None, 30, 40, 728) 2912 block6_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv3_act (Activation (None, 30, 40, 728) 0 block6_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv3 (SeparableConv2 (None, 30, 40, 728) 536536 block6_sepconv3_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv3_bn (BatchNormal (None, 30, 40, 728) 2912 block6_sepconv3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_5 (Add) (None, 30, 40, 728) 0 block6_sepconv3_bn[0][0] \n", + " add_4[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv1_act (Activation (None, 30, 40, 728) 0 add_5[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv1 (SeparableConv2 (None, 30, 40, 728) 536536 block7_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv1_bn (BatchNormal (None, 30, 40, 728) 2912 block7_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv2_act (Activation (None, 30, 40, 728) 0 block7_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv2 (SeparableConv2 (None, 30, 40, 728) 536536 block7_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv2_bn (BatchNormal (None, 30, 40, 728) 2912 block7_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv3_act (Activation (None, 30, 40, 728) 0 block7_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv3 (SeparableConv2 (None, 30, 40, 728) 536536 block7_sepconv3_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv3_bn (BatchNormal (None, 30, 40, 728) 2912 block7_sepconv3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_6 (Add) (None, 30, 40, 728) 0 block7_sepconv3_bn[0][0] \n", + " add_5[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv1_act (Activation (None, 30, 40, 728) 0 add_6[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv1 (SeparableConv2 (None, 30, 40, 728) 536536 block8_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv1_bn (BatchNormal (None, 30, 40, 728) 2912 block8_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv2_act (Activation (None, 30, 40, 728) 0 block8_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv2 (SeparableConv2 (None, 30, 40, 728) 536536 block8_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv2_bn (BatchNormal (None, 30, 40, 728) 2912 block8_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv3_act (Activation (None, 30, 40, 728) 0 block8_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv3 (SeparableConv2 (None, 30, 40, 728) 536536 block8_sepconv3_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv3_bn (BatchNormal (None, 30, 40, 728) 2912 block8_sepconv3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_7 (Add) (None, 30, 40, 728) 0 block8_sepconv3_bn[0][0] \n", + " add_6[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv1_act (Activation (None, 30, 40, 728) 0 add_7[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv1 (SeparableConv2 (None, 30, 40, 728) 536536 block9_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv1_bn (BatchNormal (None, 30, 40, 728) 2912 block9_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv2_act (Activation (None, 30, 40, 728) 0 block9_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv2 (SeparableConv2 (None, 30, 40, 728) 536536 block9_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv2_bn (BatchNormal (None, 30, 40, 728) 2912 block9_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv3_act (Activation (None, 30, 40, 728) 0 block9_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv3 (SeparableConv2 (None, 30, 40, 728) 536536 block9_sepconv3_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv3_bn (BatchNormal (None, 30, 40, 728) 2912 block9_sepconv3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_8 (Add) (None, 30, 40, 728) 0 block9_sepconv3_bn[0][0] \n", + " add_7[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv1_act (Activatio (None, 30, 40, 728) 0 add_8[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv1 (SeparableConv (None, 30, 40, 728) 536536 block10_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv1_bn (BatchNorma (None, 30, 40, 728) 2912 block10_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv2_act (Activatio (None, 30, 40, 728) 0 block10_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv2 (SeparableConv (None, 30, 40, 728) 536536 block10_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv2_bn (BatchNorma (None, 30, 40, 728) 2912 block10_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv3_act (Activatio (None, 30, 40, 728) 0 block10_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv3 (SeparableConv (None, 30, 40, 728) 536536 block10_sepconv3_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv3_bn (BatchNorma (None, 30, 40, 728) 2912 block10_sepconv3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_9 (Add) (None, 30, 40, 728) 0 block10_sepconv3_bn[0][0] \n", + " add_8[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv1_act (Activatio (None, 30, 40, 728) 0 add_9[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv1 (SeparableConv (None, 30, 40, 728) 536536 block11_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv1_bn (BatchNorma (None, 30, 40, 728) 2912 block11_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv2_act (Activatio (None, 30, 40, 728) 0 block11_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv2 (SeparableConv (None, 30, 40, 728) 536536 block11_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv2_bn (BatchNorma (None, 30, 40, 728) 2912 block11_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv3_act (Activatio (None, 30, 40, 728) 0 block11_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv3 (SeparableConv (None, 30, 40, 728) 536536 block11_sepconv3_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv3_bn (BatchNorma (None, 30, 40, 728) 2912 block11_sepconv3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_10 (Add) (None, 30, 40, 728) 0 block11_sepconv3_bn[0][0] \n", + " add_9[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv1_act (Activatio (None, 30, 40, 728) 0 add_10[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv1 (SeparableConv (None, 30, 40, 728) 536536 block12_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv1_bn (BatchNorma (None, 30, 40, 728) 2912 block12_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv2_act (Activatio (None, 30, 40, 728) 0 block12_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv2 (SeparableConv (None, 30, 40, 728) 536536 block12_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv2_bn (BatchNorma (None, 30, 40, 728) 2912 block12_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv3_act (Activatio (None, 30, 40, 728) 0 block12_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv3 (SeparableConv (None, 30, 40, 728) 536536 block12_sepconv3_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv3_bn (BatchNorma (None, 30, 40, 728) 2912 block12_sepconv3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_11 (Add) (None, 30, 40, 728) 0 block12_sepconv3_bn[0][0] \n", + " add_10[0][0] \n", + "__________________________________________________________________________________________________\n", + "block13_sepconv1_act (Activatio (None, 30, 40, 728) 0 add_11[0][0] \n", + "__________________________________________________________________________________________________\n", + "block13_sepconv1 (SeparableConv (None, 30, 40, 728) 536536 block13_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block13_sepconv1_bn (BatchNorma (None, 30, 40, 728) 2912 block13_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block13_sepconv2_act (Activatio (None, 30, 40, 728) 0 block13_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block13_sepconv2 (SeparableConv (None, 30, 40, 1024) 752024 block13_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block13_sepconv2_bn (BatchNorma (None, 30, 40, 1024) 4096 block13_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_4 (Conv2D) (None, 30, 40, 1024) 745472 add_11[0][0] \n", + "__________________________________________________________________________________________________\n", + "block13_pool (MaxPooling2D) (None, 30, 40, 1024) 0 block13_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_4 (BatchNor (None, 30, 40, 1024) 4096 conv2d_4[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_12 (Add) (None, 30, 40, 1024) 0 block13_pool[0][0] \n", + " batch_normalization_4[0][0] \n", + "__________________________________________________________________________________________________\n", + "block14_sepconv1 (SeparableConv (None, 30, 40, 1536) 1582080 add_12[0][0] \n", + "__________________________________________________________________________________________________\n", + "block14_sepconv1_bn (BatchNorma (None, 30, 40, 1536) 6144 block14_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block14_sepconv1_act (Activatio (None, 30, 40, 1536) 0 block14_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block14_sepconv2 (SeparableConv (None, 30, 40, 2048) 3159552 block14_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block14_sepconv2_bn (BatchNorma (None, 30, 40, 2048) 8192 block14_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block14_sepconv2_act (Activatio (None, 30, 40, 2048) 0 block14_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "global_conv (Conv2D) (None, 10, 14, 256) 4718592 block14_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "global_BN (BatchNormalization) (None, 10, 14, 256) 1024 global_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_1 (Activation) (None, 10, 14, 256) 0 global_BN[0][0] \n", + "__________________________________________________________________________________________________\n", + "dropout_1 (Dropout) (None, 10, 14, 256) 0 activation_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "global_average_pooling2d_1 (Glo (None, 256) 0 dropout_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "global_dense (Dense) (None, 256) 65792 global_average_pooling2d_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "dropout_2 (Dropout) (None, 256) 0 global_dense[0][0] \n", + "__________________________________________________________________________________________________\n", + "out_mean_acc (Dense) (None, 1) 257 dropout_2[0][0] \n", + "__________________________________________________________________________________________________\n", + "out_type0_acc (Dense) (None, 1) 257 dropout_2[0][0] \n", + "==================================================================================================\n", + "Total params: 25,647,402\n", + "Trainable params: 25,592,362\n", + "Non-trainable params: 55,040\n", + "__________________________________________________________________________________________________\n" + ] + } + ], + "source": [ + "# get model \n", + "model_params = {\n", + " 'input_shape': input_shape,\n", + " #'n_outs': len(losses),\n", + " 'n_outs': 2\n", + "}\n", + "model_func, mode = get_model_by_name(model_name)\n", + "#assert mode == \"simple\", \"%s is a multi-duration model! Please use the multi-duration notebook to train.\" % model_name\n", + "model = model_func(**model_params)\n", + "\n", + "if load_weights: \n", + " model.load_weights(weightspath)\n", + " print(\"load\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Checkpoints will be saved with format ckpt/RecallNet_xception/RecallNet_xception_ep{epoch:02d}_valloss{val_loss:.4f}.hdf5\n" + ] + } + ], + "source": [ + "# set up data generation and checkpoints\n", + "if not os.path.exists(ckpt_savedir): \n", + " os.makedirs(ckpt_savedir)\n", + "\n", + "\n", + "# Generators\n", + "gen_train = RecallNet_Generator(train_filename,\n", + " train_label,\n", + " train_mean,\n", + " train_type,\n", + " batch_size = 4)\n", + "\n", + "gen_val = RecallNet_Generator(val_filename,\n", + " val_label,\n", + " val_mean,\n", + " val_type,\n", + " 1)\n", + "\n", + "# Callbacks\n", + "\n", + "# where to save checkpoints\n", + "#filepath = os.path.join(ckpt_savedir, dataset_sal + \"_\" + l_str + '_ep{epoch:02d}_valloss{val_loss:.4f}.hdf5')\n", + "filepath = os.path.join(ckpt_savedir, model_name, model_name+'_ep{epoch:02d}_valloss{val_loss:.4f}.hdf5')\n", + "\n", + "print(\"Checkpoints will be saved with format %s\" % filepath)\n", + "\n", + "cb_chk = ModelCheckpoint(filepath, monitor='val_loss', verbose=1, save_weights_only=False, period=1)\n", + "cb_plot = InteractivePlot()\n", + "\n", + "def step_decay(epoch):\n", + " lrate = init_lr * math.pow(lr_reduce_by, math.floor((1+epoch)/reduce_at_epoch))\n", + " if epoch%reduce_at_epoch:\n", + " print('Reducing lr. New lr is:', lrate)\n", + " return lrate\n", + "cb_sched = LearningRateScheduler(step_decay)\n", + "\n", + "cbs = [cb_chk, cb_sched, cb_plot]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[array([0.74688797, 0.84647303, 0.93360996, 0.8340249 ]), array([0.7826087 , 0.95652174, 1. , 0.86956522])]\n" + ] + } + ], + "source": [ + "#test the generator \n", + "batch_img, out= gen_train.__getitem__(1)\n", + "print(out)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Train" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#model.compile(optimizer=opt, loss={'out_mean_acc': 'mean_squared_error', 'out_type0_acc':'mean_squared_error','out_classif':'binary_crossentropy'}, loss_weights={'out_mean_acc': 3, 'out_type0_acc': 3, 'out_classif': 1})\n", + "model.compile(optimizer=opt, loss={'out_mean_acc': 'mean_squared_error', 'out_type0_acc':'mean_squared_error'}, loss_weights={'out_mean_acc': 1, 'out_type0_acc': 1})\n", + "\n", + "print('Ready to train')\n", + "model.fit_generator(gen_train, epochs=n_epochs, verbose=1, callbacks=cbs, validation_data=gen_val, max_queue_size=10, workers=5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## validation" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "load\n" + ] + } + ], + "source": [ + "data_path = '/your/path/VisRecall/'\n", + "\n", + "if True:\n", + " W = \"./ckpt/RecallNet/U-question/Fold4/RecallNet_xception_ep10_valloss0.0313.hdf5\"\n", + " model.load_weights(W)\n", + " print('load')" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "avg, type: 0.02553353417062307 0.02617591625785007\n" + ] + } + ], + "source": [ + "from sklearn.metrics import mean_squared_error\n", + "\n", + "mean_list = []\n", + "type_list = []\n", + "\n", + "num_t = 0.0\n", + "\n", + "for i in range(len(val_filename)):\n", + " img = preprocess_images([val_filename[i]], 240, 320)\n", + " preds = model.predict(img)\n", + " #if(np.argmax(preds[2][0]) == np.argmax(val_label[i])):\n", + " # num_t += 1\n", + " mean_acc = preds[0][0]\n", + " type_acc = preds[1][0]\n", + " mean_list.append(mean_squared_error([val_mean[i]], mean_acc))\n", + " type_list.append(mean_squared_error([val_type[i]], type_acc))\n", + " #print(val_label[i])\n", + "\n", + "#print('classificaion: ', num_t/len(val_filename))\n", + "print('avg, type: ', np.mean(mean_list),np.mean(type_list))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.metrics import mean_squared_error" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "load\n", + "[(0.1154690275375791, 0.07620564377135046)]\n", + "load\n", + "[(0.1154690275375791, 0.07620564377135046), (0.10878741427577963, 0.2667425108749781)]\n", + "load\n", + "[(0.1154690275375791, 0.07620564377135046), (0.10878741427577963, 0.2667425108749781), (0.5932855723937102, 0.38129302771926993)]\n", + "load\n", + "[(0.1154690275375791, 0.07620564377135046), (0.10878741427577963, 0.2667425108749781), (0.5932855723937102, 0.38129302771926993), (0.015003968232081454, 0.06507362662601399)]\n", + "load\n", + "[(0.1154690275375791, 0.07620564377135046), (0.10878741427577963, 0.2667425108749781), (0.5932855723937102, 0.38129302771926993), (0.015003968232081454, 0.06507362662601399), (0.02553353417062307, 0.02617591625785007)]\n" + ] + } + ], + "source": [ + "# 0: T, 1: FE, 2: F, 3: RV, 4: U\n", + "TYPE = 4\n", + "final = []\n", + "for split in range(5):\n", + " TYPE_Q = ['T','FE','F','RV','U']\n", + " bp_imp = data_path + 'merged/src/'\n", + " training_set = np.load(data_path + 'training_data/%s-question/train_split%d.npy'%(TYPE_Q[TYPE], split),allow_pickle=True)\n", + " val_set = np.load(data_path + 'training_data/%s-question/val_split%d.npy'%(TYPE_Q[TYPE], split),allow_pickle=True)\n", + " train_filename = []\n", + " train_label = []\n", + " train_mean = []\n", + " train_type = []\n", + "\n", + " for data in training_set:\n", + " one_hot = [0,0,0,0,0,0]\n", + " one_hot[data['vistype']] = 1\n", + " train_filename.append(bp_imp+data['name'])\n", + " train_label.append(one_hot)\n", + " train_mean.append(data['norm_mean_acc_withD'])\n", + " train_type.append(data['norm_%d_withD'%(TYPE)])\n", + " \n", + " val_filename = []\n", + " val_label = []\n", + " val_mean = []\n", + " val_type = []\n", + " for data in val_set:\n", + " one_hot = [0,0,0,0,0,0]\n", + " one_hot[data['vistype']] = 1\n", + " val_filename.append(bp_imp+data['name'])\n", + " val_label.append(one_hot)\n", + " val_mean.append(data['norm_mean_acc_withD'])\n", + " val_type.append(data['norm_%d_withD'%(TYPE)])\n", + "\n", + " mean_list = []\n", + " type_list = []\n", + "\n", + " num_t = 0.0\n", + " if True:\n", + " W = \"./ckpt/RecallNet_xception/U-question/Fold\"+str(split)+\"/RecallNet_xception_ep10.hdf5\"\n", + " model.load_weights(W)\n", + " print('load')\n", + "\n", + " for i in range(len(val_filename)):\n", + " img = preprocess_images([val_filename[i]], 240, 320)\n", + " preds = model.predict(img)\n", + " #if(np.argmax(preds[2][0]) == np.argmax(val_label[i])):\n", + " # num_t += 1\n", + " mean_acc = preds[0][0]\n", + " type_acc = preds[1][0]\n", + " mean_list.append(mean_squared_error([val_mean[i]], mean_acc))\n", + " type_list.append(mean_squared_error([val_type[i]], type_acc))\n", + " final.append((np.mean(mean_list),np.mean(type_list)))\n", + " print(final)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([0.1716159 , 0.16309815]), array([0.21483601, 0.13730111]))" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.mean(final ,axis=0),np.std(final ,axis=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Test" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/bar4.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/pie4.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/bar1.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/pie2.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/bar3.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/line1.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/bar2.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/pie1.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/line2.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/line4.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/line3.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/pie3.png']\n" + ] + } + ], + "source": [ + "#W_T = \"./ckpt/VMQA_UMSI/T-question/UMSI_weight1:1/Fold0/VMQA_UMSI_ep10_valloss0.6198.hdf5\"\n", + "W_T = \"./ckpt/RecallNet_xception/T-question/Fold4/RecallNet_xception_ep10.hdf5\"\n", + "\n", + "model.load_weights(W_T)\n", + "\n", + "image_path = \"/your/path/to/src\"\n", + "list_img_targets = glob.glob(image_path + '/*.png')\n", + "print(list_img_targets)\n", + "images = preprocess_images(list_img_targets, model_inp_size[0], model_inp_size[1])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "preds_recallNet = model.predict(images)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(12, 1) [array([[0.6729137 ],\n", + " [0.62224036],\n", + " [0.6644782 ],\n", + " [0.63536835],\n", + " [0.6595377 ],\n", + " [0.6628296 ],\n", + " [0.600067 ],\n", + " [0.64756936],\n", + " [0.600191 ],\n", + " [0.6459451 ],\n", + " [0.6242438 ],\n", + " [0.60450727]], dtype=float32), array([[0.7803583 ],\n", + " [0.67262685],\n", + " [0.75816834],\n", + " [0.718869 ],\n", + " [0.7442306 ],\n", + " [0.76404536],\n", + " [0.8003189 ],\n", + " [0.7172563 ],\n", + " [0.7985541 ],\n", + " [0.81216127],\n", + " [0.6953638 ],\n", + " [0.6564585 ]], dtype=float32)]\n" + ] + } + ], + "source": [ + "print(preds_recallNet[0].shape, preds_recallNet)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "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.7.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/RecallNet/notebooks/massvis_recall.json b/RecallNet/notebooks/massvis_recall.json new file mode 100644 index 0000000..0145c8c --- /dev/null +++ b/RecallNet/notebooks/massvis_recall.json @@ -0,0 +1,1747 @@ +{ + "economist_daily_chart_103.png": { + "expert_score": "1.4", + "mean_prediction": "0.6526242", + "type0_prediction": "0.7693369" + }, + "economist_daily_chart_106.png": { + "expert_score": "2.0", + "mean_prediction": "0.59069777", + "type0_prediction": "0.6385198" + }, + "economist_daily_chart_110.png": { + "expert_score": "1.5", + "mean_prediction": "0.62736744", + "type0_prediction": "0.7389466" + }, + "economist_daily_chart_116.png": { + "expert_score": "2.125", + "mean_prediction": "0.6193146", + "type0_prediction": "0.7434572" + }, + "economist_daily_chart_124.png": { + "expert_score": "1.9090909090909092", + "mean_prediction": "0.5933149", + "type0_prediction": "0.63973683" + }, + "economist_daily_chart_129.png": { + "expert_score": "1.75", + "mean_prediction": "0.6148833", + "type0_prediction": "0.74162596" + }, + "economist_daily_chart_153.png": { + "expert_score": "1.875", + "mean_prediction": "0.6188406", + "type0_prediction": "0.7405883" + }, + "economist_daily_chart_165.png": { + "expert_score": "1.5555555555555556", + "mean_prediction": "0.6034341", + "type0_prediction": "0.6516661" + }, + "economist_daily_chart_167.png": { + "expert_score": "0.8", + "mean_prediction": "0.57328755", + "type0_prediction": "0.62960786" + }, + "economist_daily_chart_18.png": { + "expert_score": "0.5", + "mean_prediction": "0.58709306", + "type0_prediction": "0.63950187" + }, + "economist_daily_chart_187.png": { + "expert_score": "2.3333333333333335", + "mean_prediction": "0.5704299", + "type0_prediction": "0.6180464" + }, + "economist_daily_chart_219.png": { + "expert_score": "2.4444444444444446", + "mean_prediction": "0.6305591", + "type0_prediction": "0.747808" + }, + "economist_daily_chart_240.png": { + "expert_score": "1.5", + "mean_prediction": "0.6195485", + "type0_prediction": "0.74439514" + }, + "economist_daily_chart_258.png": { + "expert_score": "0.8181818181818182", + "mean_prediction": "0.5985512", + "type0_prediction": "0.66529727" + }, + "economist_daily_chart_268.png": { + "expert_score": "2.6666666666666665", + "mean_prediction": "0.6234554", + "type0_prediction": "0.7502826" + }, + "economist_daily_chart_317.png": { + "expert_score": "2.3", + "mean_prediction": "0.6351654", + "type0_prediction": "0.7566254" + }, + "economist_daily_chart_324.png": { + "expert_score": "1.5", + "mean_prediction": "0.6187876", + "type0_prediction": "0.75107867" + }, + "economist_daily_chart_35.png": { + "expert_score": "0.5", + "mean_prediction": "0.60050285", + "type0_prediction": "0.6467935" + }, + "economist_daily_chart_380.png": { + "expert_score": "1.5", + "mean_prediction": "0.6182935", + "type0_prediction": "0.74277675" + }, + "economist_daily_chart_390.png": { + "expert_score": "2.3333333333333335", + "mean_prediction": "0.63064075", + "type0_prediction": "0.7276634" + }, + "economist_daily_chart_392.png": { + "expert_score": "1.8571428571428572", + "mean_prediction": "0.5887467", + "type0_prediction": "0.6759593" + }, + "economist_daily_chart_4.png": { + "expert_score": "2.0", + "mean_prediction": "0.59462684", + "type0_prediction": "0.63441557" + }, + "economist_daily_chart_406.png": { + "expert_score": "2.125", + "mean_prediction": "0.6550516", + "type0_prediction": "0.75928026" + }, + "economist_daily_chart_416.png": { + "expert_score": "1.5", + "mean_prediction": "0.6149327", + "type0_prediction": "0.7476257" + }, + "economist_daily_chart_430.png": { + "expert_score": "1.5", + "mean_prediction": "0.6427703", + "type0_prediction": "0.76749367" + }, + "economist_daily_chart_439.png": { + "expert_score": "1.8", + "mean_prediction": "0.5920104", + "type0_prediction": "0.63726085" + }, + "economist_daily_chart_449.png": { + "expert_score": "0.6", + "mean_prediction": "0.588266", + "type0_prediction": "0.6461664" + }, + "economist_daily_chart_45.png": { + "expert_score": "2.5", + "mean_prediction": "0.58956355", + "type0_prediction": "0.6502356" + }, + "economist_daily_chart_453.png": { + "expert_score": "1.8", + "mean_prediction": "0.6530614", + "type0_prediction": "0.7663078" + }, + "economist_daily_chart_454.png": { + "expert_score": "1.1666666666666667", + "mean_prediction": "0.5886583", + "type0_prediction": "0.63458115" + }, + "economist_daily_chart_46.png": { + "expert_score": "2.3125", + "mean_prediction": "0.6491836", + "type0_prediction": "0.7552171" + }, + "economist_daily_chart_475.png": { + "expert_score": "2.2666666666666666", + "mean_prediction": "0.6494352", + "type0_prediction": "0.7889371" + }, + "economist_daily_chart_48.png": { + "expert_score": "2.1538461538461537", + "mean_prediction": "0.6447696", + "type0_prediction": "0.74866724" + }, + "economist_daily_chart_490.png": { + "expert_score": "2.3333333333333335", + "mean_prediction": "0.62032086", + "type0_prediction": "0.74888945" + }, + "economist_daily_chart_491.png": { + "expert_score": "1.6", + "mean_prediction": "0.58728844", + "type0_prediction": "0.67988265" + }, + "economist_daily_chart_493.png": { + "expert_score": "1.4166666666666667", + "mean_prediction": "0.604566", + "type0_prediction": "0.6511099" + }, + "economist_daily_chart_5.png": { + "expert_score": "1.8", + "mean_prediction": "0.6051991", + "type0_prediction": "0.6540281" + }, + "economist_daily_chart_516.png": { + "expert_score": "0.3333333333333333", + "mean_prediction": "0.63956916", + "type0_prediction": "0.7426005" + }, + "economist_daily_chart_520.png": { + "expert_score": "1.0", + "mean_prediction": "0.63794243", + "type0_prediction": "0.7655411" + }, + "economist_daily_chart_521.png": { + "expert_score": "1.3333333333333333", + "mean_prediction": "0.61930776", + "type0_prediction": "0.748795" + }, + "economist_daily_chart_529.png": { + "expert_score": "1.5", + "mean_prediction": "0.61965954", + "type0_prediction": "0.7476311" + }, + "economist_daily_chart_53.png": { + "expert_score": "2.2857142857142856", + "mean_prediction": "0.58391374", + "type0_prediction": "0.62906426" + }, + "economist_daily_chart_54.png": { + "expert_score": "2.0", + "mean_prediction": "0.5856418", + "type0_prediction": "0.6314357" + }, + "economist_daily_chart_66.png": { + "expert_score": "1.4285714285714286", + "mean_prediction": "0.62004", + "type0_prediction": "0.7458705" + }, + "economist_daily_chart_69.png": { + "expert_score": "1.2727272727272727", + "mean_prediction": "0.6189195", + "type0_prediction": "0.7395625" + }, + "economist_daily_chart_75.png": { + "expert_score": "1.5", + "mean_prediction": "0.6192386", + "type0_prediction": "0.7431876" + }, + "economist_daily_chart_85.png": { + "expert_score": "0.3333333333333333", + "mean_prediction": "0.5933921", + "type0_prediction": "0.63643104" + }, + "economist_daily_chart_89.png": { + "expert_score": "1.4444444444444444", + "mean_prediction": "0.6055433", + "type0_prediction": "0.62715554" + }, + "economist_daily_chart_99.png": { + "expert_score": "1.3076923076923077", + "mean_prediction": "0.62124693", + "type0_prediction": "0.7462341" + }, + "np_48.png": { + "expert_score": "2.142857142857143", + "mean_prediction": "0.6048413", + "type0_prediction": "0.6320703" + }, + "treasuryA10.png": { + "expert_score": "1.6", + "mean_prediction": "0.5820331", + "type0_prediction": "0.6583815" + }, + "treasuryB04.png": { + "expert_score": "1.0", + "mean_prediction": "0.572775", + "type0_prediction": "0.63626003" + }, + "treasuryB10.png": { + "expert_score": "1.0", + "mean_prediction": "0.5979424", + "type0_prediction": "0.6525191" + }, + "treasuryB15.png": { + "expert_score": "2.0", + "mean_prediction": "0.59685946", + "type0_prediction": "0.648544" + }, + "treasuryD04_3.png": { + "expert_score": "0.6666666666666666", + "mean_prediction": "0.60225445", + "type0_prediction": "0.67117304" + }, + "treasuryD05_1.png": { + "expert_score": "0.0", + "mean_prediction": "0.6043305", + "type0_prediction": "0.6115132" + }, + "treasuryD08.png": { + "expert_score": "1.0", + "mean_prediction": "0.6145445", + "type0_prediction": "0.6811003" + }, + "treasuryG02_2.png": { + "expert_score": "0.3333333333333333", + "mean_prediction": "0.59302926", + "type0_prediction": "0.6767729" + }, + "treasuryG05_1.png": { + "expert_score": "1.0", + "mean_prediction": "0.6114187", + "type0_prediction": "0.68985176" + }, + "treasuryG06_2.png": { + "expert_score": "0.5714285714285714", + "mean_prediction": "0.6068216", + "type0_prediction": "0.69132614" + }, + "treasuryG07_2.png": { + "expert_score": "0.5", + "mean_prediction": "0.60214037", + "type0_prediction": "0.6862509" + }, + "treasuryI01_2.png": { + "expert_score": "1.3333333333333333", + "mean_prediction": "0.6206653", + "type0_prediction": "0.68543863" + }, + "treasuryI02_1.png": { + "expert_score": "1.5", + "mean_prediction": "0.62067723", + "type0_prediction": "0.6854466" + }, + "treasuryK01.png": { + "expert_score": "1.75", + "mean_prediction": "0.611338", + "type0_prediction": "0.617098" + }, + "treasuryK03_2.png": { + "expert_score": "1.0", + "mean_prediction": "0.5968964", + "type0_prediction": "0.6506131" + }, + "treasuryK05_1.png": { + "expert_score": "0.5", + "mean_prediction": "0.60286266", + "type0_prediction": "0.66523165" + }, + "treasuryK06.png": { + "expert_score": "1.6666666666666667", + "mean_prediction": "0.5971647", + "type0_prediction": "0.64748055" + }, + "treasuryL04_1.png": { + "expert_score": "0.5", + "mean_prediction": "0.5924104", + "type0_prediction": "0.69232345" + }, + "treasuryL10_1.png": { + "expert_score": "0.0", + "mean_prediction": "0.6104216", + "type0_prediction": "0.74653834" + }, + "treasuryL11_2.png": { + "expert_score": "0.3333333333333333", + "mean_prediction": "0.58738047", + "type0_prediction": "0.656926" + }, + "treasuryL13.png": { + "expert_score": "0.0", + "mean_prediction": "0.600685", + "type0_prediction": "0.60607654" + }, + "treasuryL16.png": { + "expert_score": "1.5", + "mean_prediction": "0.58622843", + "type0_prediction": "0.656503" + }, + "v482_n7386_5_f5.png": { + "expert_score": "1.3846153846153846", + "mean_prediction": "0.606468", + "type0_prediction": "0.648476" + }, + "v482_n7386_7_f2.png": { + "expert_score": "1.125", + "mean_prediction": "0.62070495", + "type0_prediction": "0.68547374" + }, + "v483_n7387_20_f2.png": { + "expert_score": "1.875", + "mean_prediction": "0.6065424", + "type0_prediction": "0.68959403" + }, + "v483_n7387_5_f1.png": { + "expert_score": "0.8", + "mean_prediction": "0.6137462", + "type0_prediction": "0.6786304" + }, + "v483_n7387_7_f4.png": { + "expert_score": "0.2", + "mean_prediction": "0.6199466", + "type0_prediction": "0.6851053" + }, + "v483_n7388_11_f2.png": { + "expert_score": "0.0", + "mean_prediction": "0.62070495", + "type0_prediction": "0.68547374" + }, + "v483_n7388_14_f3.png": { + "expert_score": "1.2", + "mean_prediction": "0.6117139", + "type0_prediction": "0.6362622" + }, + "v483_n7389_24_f3.png": { + "expert_score": "1.0", + "mean_prediction": "0.6291723", + "type0_prediction": "0.6203423" + }, + "v483_n7390_14_f2.png": { + "expert_score": "0.1", + "mean_prediction": "0.60571235", + "type0_prediction": "0.6884869" + }, + "v483_n7390_21_f4.png": { + "expert_score": "1.5555555555555556", + "mean_prediction": "0.6207028", + "type0_prediction": "0.68547493" + }, + "v483_n7390_8_f1.png": { + "expert_score": "1.0", + "mean_prediction": "0.6002193", + "type0_prediction": "0.66722167" + }, + "v483_n7391_1_f1.png": { + "expert_score": "1.8333333333333333", + "mean_prediction": "0.6017208", + "type0_prediction": "0.674683" + }, + "v483_n7391_3_f5.png": { + "expert_score": "1.6923076923076923", + "mean_prediction": "0.60634416", + "type0_prediction": "0.614" + }, + "v483_n7391_8_f1.png": { + "expert_score": "0.25", + "mean_prediction": "0.6060691", + "type0_prediction": "0.6838458" + }, + "v484_n7392_14_f3.png": { + "expert_score": "1.8571428571428572", + "mean_prediction": "0.6177402", + "type0_prediction": "0.63390553" + }, + "v484_n7393_20_f1.png": { + "expert_score": "1.25", + "mean_prediction": "0.6197631", + "type0_prediction": "0.68440455" + }, + "v484_n7393_6_f4.png": { + "expert_score": "0.3333333333333333", + "mean_prediction": "0.61831725", + "type0_prediction": "0.68226963" + }, + "v484_n7394_10_f4.png": { + "expert_score": "0.8571428571428571", + "mean_prediction": "0.6112837", + "type0_prediction": "0.6915994" + }, + "v484_n7394_5_f2.png": { + "expert_score": "0.42857142857142855", + "mean_prediction": "0.61568815", + "type0_prediction": "0.6809549" + }, + "v484_n7394_5_f5.png": { + "expert_score": "0.3333333333333333", + "mean_prediction": "0.59652233", + "type0_prediction": "0.6331356" + }, + "v484_n7394_8_f2.png": { + "expert_score": "0.6", + "mean_prediction": "0.60299027", + "type0_prediction": "0.6739823" + }, + "v484_n7394_8_f4.png": { + "expert_score": "0.75", + "mean_prediction": "0.61719483", + "type0_prediction": "0.6420772" + }, + "v484_n7395_11_f1.png": { + "expert_score": "1.1666666666666667", + "mean_prediction": "0.61188173", + "type0_prediction": "0.6336385" + }, + "v485_n7397_14_f3.png": { + "expert_score": "1.4", + "mean_prediction": "0.60415167", + "type0_prediction": "0.6707391" + }, + "v485_n7397_15_f1.png": { + "expert_score": "0.45454545454545453", + "mean_prediction": "0.5899385", + "type0_prediction": "0.62042457" + }, + "v485_n7397_6_f4.png": { + "expert_score": "1.5", + "mean_prediction": "0.61538565", + "type0_prediction": "0.6804728" + }, + "v485_n7399_13_f4.png": { + "expert_score": "0.8333333333333334", + "mean_prediction": "0.61944765", + "type0_prediction": "0.6855292" + }, + "v485_n7399_9_f2.png": { + "expert_score": "0.3333333333333333", + "mean_prediction": "0.6081367", + "type0_prediction": "0.63100696" + }, + "v485_n7400_14_f1.png": { + "expert_score": "1.5714285714285714", + "mean_prediction": "0.61560667", + "type0_prediction": "0.658224" + }, + "v485_n7400_14_f2.png": { + "expert_score": "1.0", + "mean_prediction": "0.5998989", + "type0_prediction": "0.64249355" + }, + "v485_n7400_15_f2.png": { + "expert_score": "1.0714285714285714", + "mean_prediction": "0.5947678", + "type0_prediction": "0.63747567" + }, + "v486_n7401_8_f1.png": { + "expert_score": "1.0", + "mean_prediction": "0.602675", + "type0_prediction": "0.62510216" + }, + "v486_n7401_8_f2.png": { + "expert_score": "1.5714285714285714", + "mean_prediction": "0.5959031", + "type0_prediction": "0.6641117" + }, + "v486_n7403_19_f2.png": { + "expert_score": "0.5714285714285714", + "mean_prediction": "0.6040987", + "type0_prediction": "0.6870232" + }, + "v486_n7403_1_f8.png": { + "expert_score": "0.375", + "mean_prediction": "0.56361353", + "type0_prediction": "0.6277046" + }, + "v486_n7404_1_f2.png": { + "expert_score": "1.8666666666666667", + "mean_prediction": "0.60754913", + "type0_prediction": "0.6448297" + }, + "v486_n7404_20_f6.png": { + "expert_score": "0.5", + "mean_prediction": "0.61506194", + "type0_prediction": "0.68054014" + }, + "v486_n7404_6_f1.png": { + "expert_score": "1.25", + "mean_prediction": "0.5993258", + "type0_prediction": "0.660793" + }, + "v486_n7404_9_f2.png": { + "expert_score": "0.6666666666666666", + "mean_prediction": "0.61758435", + "type0_prediction": "0.68119085" + }, + "v487_n7405_21_f2.png": { + "expert_score": "0.6666666666666666", + "mean_prediction": "0.62299496", + "type0_prediction": "0.6350698" + }, + "v487_n7405_22_f1.png": { + "expert_score": "1.4285714285714286", + "mean_prediction": "0.62070495", + "type0_prediction": "0.68547374" + }, + "v487_n7405_6_f4.png": { + "expert_score": "0.6666666666666666", + "mean_prediction": "0.60552067", + "type0_prediction": "0.6380367" + }, + "v487_n7405_7_f1.png": { + "expert_score": "0.8", + "mean_prediction": "0.61922956", + "type0_prediction": "0.6836857" + }, + "v487_n7406_13_f2.png": { + "expert_score": "1.1111111111111112", + "mean_prediction": "0.58275753", + "type0_prediction": "0.63164395" + }, + "v487_n7406_13_f5.png": { + "expert_score": "1.0909090909090908", + "mean_prediction": "0.6121363", + "type0_prediction": "0.67762506" + }, + "v487_n7407_15_f3.png": { + "expert_score": "1.7142857142857142", + "mean_prediction": "0.6195928", + "type0_prediction": "0.6271997" + }, + "v487_n7407_22_f2.png": { + "expert_score": "2.2142857142857144", + "mean_prediction": "0.60411817", + "type0_prediction": "0.6757416" + }, + "v487_n7407_22_f4.png": { + "expert_score": "1.8333333333333333", + "mean_prediction": "0.6013745", + "type0_prediction": "0.6226264" + }, + "v487_n7408_15_f3.png": { + "expert_score": "0.25", + "mean_prediction": "0.6079177", + "type0_prediction": "0.681171" + }, + "v488_n7410_13_f4.png": { + "expert_score": "1.7272727272727273", + "mean_prediction": "0.617272", + "type0_prediction": "0.62168455" + }, + "v488_n7410_15_f3.png": { + "expert_score": "2.5", + "mean_prediction": "0.5811149", + "type0_prediction": "0.62905926" + }, + "v488_n7411_6_f4.png": { + "expert_score": "0.3333333333333333", + "mean_prediction": "0.6173454", + "type0_prediction": "0.6807521" + }, + "v488_n7411_9_f1.png": { + "expert_score": "1.1", + "mean_prediction": "0.6096208", + "type0_prediction": "0.6072582" + }, + "v488_n7412_1_f3.png": { + "expert_score": "1.5", + "mean_prediction": "0.6123743", + "type0_prediction": "0.6812412" + }, + "v488_n7412_1_f4.png": { + "expert_score": "2.0", + "mean_prediction": "0.5945537", + "type0_prediction": "0.6176088" + }, + "v488_n7412_4_f1.png": { + "expert_score": "1.2222222222222223", + "mean_prediction": "0.6034296", + "type0_prediction": "0.6771955" + }, + "v488_n7412_7_f1.png": { + "expert_score": "1.3333333333333333", + "mean_prediction": "0.62070453", + "type0_prediction": "0.68547434" + }, + "v488_n7412_8_f1.png": { + "expert_score": "1.5", + "mean_prediction": "0.6210628", + "type0_prediction": "0.62004614" + }, + "v488_n7412_9_f1.png": { + "expert_score": "1.5714285714285714", + "mean_prediction": "0.6162308", + "type0_prediction": "0.70697176" + }, + "v488_n7413_3_f2.png": { + "expert_score": "0.5714285714285714", + "mean_prediction": "0.62517345", + "type0_prediction": "0.6165365" + }, + "v489_n7414_20_f1.png": { + "expert_score": "1.5", + "mean_prediction": "0.62052137", + "type0_prediction": "0.6854003" + }, + "v489_n7414_25_f2.png": { + "expert_score": "2.0", + "mean_prediction": "0.61049956", + "type0_prediction": "0.6914966" + }, + "v489_n7415_12_f5.png": { + "expert_score": "1.5", + "mean_prediction": "0.59056455", + "type0_prediction": "0.62178653" + }, + "v489_n7415_7_f2.png": { + "expert_score": "1.7272727272727273", + "mean_prediction": "0.61203784", + "type0_prediction": "0.61520296" + }, + "v489_n7416_15_f2.png": { + "expert_score": "1.875", + "mean_prediction": "0.62321836", + "type0_prediction": "0.6159365" + }, + "v489_n7416_3_f4.png": { + "expert_score": "1.5", + "mean_prediction": "0.6168761", + "type0_prediction": "0.6240856" + }, + "v489_n7416_4_f6.png": { + "expert_score": "0.6923076923076923", + "mean_prediction": "0.6134794", + "type0_prediction": "0.6247862" + }, + "v490_n7418_12_f1.png": { + "expert_score": "1.5", + "mean_prediction": "0.60826415", + "type0_prediction": "0.67886835" + }, + "v490_n7418_14_f2.png": { + "expert_score": "1.4", + "mean_prediction": "0.6203702", + "type0_prediction": "0.6851743" + }, + "v490_n7418_1_f2.png": { + "expert_score": "1.75", + "mean_prediction": "0.6196696", + "type0_prediction": "0.6883856" + }, + "v490_n7418_6_f3.png": { + "expert_score": "1.375", + "mean_prediction": "0.6091939", + "type0_prediction": "0.677686" + }, + "v490_n7419_11_f1.png": { + "expert_score": "1.5", + "mean_prediction": "0.6171872", + "type0_prediction": "0.6072875" + }, + "v490_n7419_2_f1.png": { + "expert_score": "1.2", + "mean_prediction": "0.6101378", + "type0_prediction": "0.6903768" + }, + "v490_n7419_2_f2.png": { + "expert_score": "0.875", + "mean_prediction": "0.6115277", + "type0_prediction": "0.69749075" + }, + "v490_n7419_7_f4.png": { + "expert_score": "0.3333333333333333", + "mean_prediction": "0.6003528", + "type0_prediction": "0.6291247" + }, + "v490_n7420_13_f4.png": { + "expert_score": "1.0", + "mean_prediction": "0.6057723", + "type0_prediction": "0.65037525" + }, + "v490_n7420_23_f5.png": { + "expert_score": "1.3333333333333333", + "mean_prediction": "0.611367", + "type0_prediction": "0.6179916" + }, + "vis109.png": { + "expert_score": "1.2222222222222223", + "mean_prediction": "0.5992757", + "type0_prediction": "0.66403157" + }, + "vis230.png": { + "expert_score": "1.8888888888888888", + "mean_prediction": "0.5965215", + "type0_prediction": "0.6147867" + }, + "vis250.png": { + "expert_score": "2.466666666666667", + "mean_prediction": "0.6126299", + "type0_prediction": "0.67780924" + }, + "vis278.png": { + "expert_score": "2.4", + "mean_prediction": "0.60366887", + "type0_prediction": "0.6202355" + }, + "vis286.png": { + "expert_score": "2.0", + "mean_prediction": "0.62070316", + "type0_prediction": "0.6854748" + }, + "vis288.png": { + "expert_score": "1.625", + "mean_prediction": "0.590909", + "type0_prediction": "0.6188193" + }, + "vis328.png": { + "expert_score": "2.25", + "mean_prediction": "0.57976925", + "type0_prediction": "0.6425487" + }, + "vis409.png": { + "expert_score": "2.2", + "mean_prediction": "0.5893011", + "type0_prediction": "0.6557507" + }, + "vis416.png": { + "expert_score": "2.2", + "mean_prediction": "0.5985812", + "type0_prediction": "0.6513602" + }, + "vis417.png": { + "expert_score": "2.1666666666666665", + "mean_prediction": "0.5975692", + "type0_prediction": "0.62505215" + }, + "vis428.png": { + "expert_score": "2.5454545454545454", + "mean_prediction": "0.6007319", + "type0_prediction": "0.6255739" + }, + "vis499.png": { + "expert_score": "2.3846153846153846", + "mean_prediction": "0.5892734", + "type0_prediction": "0.6241529" + }, + "vis512.png": { + "expert_score": "1.9166666666666667", + "mean_prediction": "0.5988049", + "type0_prediction": "0.662629" + }, + "vis564.png": { + "expert_score": "2.1", + "mean_prediction": "0.597617", + "type0_prediction": "0.64324975" + }, + "vis586.png": { + "expert_score": "1.8", + "mean_prediction": "0.6207116", + "type0_prediction": "0.6856223" + }, + "vis618.png": { + "expert_score": "2.1", + "mean_prediction": "0.6202488", + "type0_prediction": "0.6844669" + }, + "vis625.png": { + "expert_score": "2.090909090909091", + "mean_prediction": "0.60115504", + "type0_prediction": "0.64656186" + }, + "vis630.png": { + "expert_score": "1.6363636363636365", + "mean_prediction": "0.6065575", + "type0_prediction": "0.6450582" + }, + "vis652.png": { + "expert_score": "2.75", + "mean_prediction": "0.5932087", + "type0_prediction": "0.6225787" + }, + "vis67.png": { + "expert_score": "2.1333333333333333", + "mean_prediction": "0.6008944", + "type0_prediction": "0.6552617" + }, + "vis678.png": { + "expert_score": "1.5384615384615385", + "mean_prediction": "0.61029464", + "type0_prediction": "0.65702176" + }, + "vis697.png": { + "expert_score": "2.4615384615384617", + "mean_prediction": "0.60454655", + "type0_prediction": "0.68967366" + }, + "vis708.png": { + "expert_score": "1.8333333333333333", + "mean_prediction": "0.5979827", + "type0_prediction": "0.66826177" + }, + "vis729.png": { + "expert_score": "1.8181818181818181", + "mean_prediction": "0.6076941", + "type0_prediction": "0.6723663" + }, + "vis768.png": { + "expert_score": "1.7", + "mean_prediction": "0.60984963", + "type0_prediction": "0.6086445" + }, + "vis831.png": { + "expert_score": "1.9090909090909092", + "mean_prediction": "0.62752485", + "type0_prediction": "0.6340371" + }, + "vis850.png": { + "expert_score": "2.2777777777777777", + "mean_prediction": "0.61781186", + "type0_prediction": "0.67262554" + }, + "vis859.png": { + "expert_score": "1.6363636363636365", + "mean_prediction": "0.6133297", + "type0_prediction": "0.66823775" + }, + "vis87.png": { + "expert_score": "1.6", + "mean_prediction": "0.5996474", + "type0_prediction": "0.59818125" + }, + "visMost108.png": { + "expert_score": "2.6666666666666665", + "mean_prediction": "0.6122491", + "type0_prediction": "0.62193704" + }, + "visMost132.png": { + "expert_score": "1.625", + "mean_prediction": "0.61164916", + "type0_prediction": "0.6710496" + }, + "visMost143.png": { + "expert_score": "1.2", + "mean_prediction": "0.6082353", + "type0_prediction": "0.6757817" + }, + "visMost147.png": { + "expert_score": "2.076923076923077", + "mean_prediction": "0.5868444", + "type0_prediction": "0.6858201" + }, + "visMost187.png": { + "expert_score": "2.0714285714285716", + "mean_prediction": "0.5927991", + "type0_prediction": "0.6203605" + }, + "visMost190.png": { + "expert_score": "1.5", + "mean_prediction": "0.5978454", + "type0_prediction": "0.6587197" + }, + "visMost215.png": { + "expert_score": "1.8333333333333333", + "mean_prediction": "0.59669924", + "type0_prediction": "0.6624888" + }, + "visMost217.png": { + "expert_score": "2.3636363636363638", + "mean_prediction": "0.5949344", + "type0_prediction": "0.6223303" + }, + "visMost227.png": { + "expert_score": "2.0", + "mean_prediction": "0.6048044", + "type0_prediction": "0.62074274" + }, + "visMost232.png": { + "expert_score": "2.6153846153846154", + "mean_prediction": "0.59731036", + "type0_prediction": "0.6131844" + }, + "visMost240.png": { + "expert_score": "2.2222222222222223", + "mean_prediction": "0.6149985", + "type0_prediction": "0.62215763" + }, + "visMost244.png": { + "expert_score": "1.75", + "mean_prediction": "0.6027669", + "type0_prediction": "0.6464523" + }, + "visMost255.png": { + "expert_score": "2.0", + "mean_prediction": "0.5952425", + "type0_prediction": "0.6152636" + }, + "visMost261.png": { + "expert_score": "2.090909090909091", + "mean_prediction": "0.596997", + "type0_prediction": "0.6124725" + }, + "visMost267.png": { + "expert_score": "1.75", + "mean_prediction": "0.59342843", + "type0_prediction": "0.64708066" + }, + "visMost271.png": { + "expert_score": "2.4166666666666665", + "mean_prediction": "0.6229094", + "type0_prediction": "0.6988087" + }, + "visMost274.png": { + "expert_score": "1.2307692307692308", + "mean_prediction": "0.6064115", + "type0_prediction": "0.61796486" + }, + "visMost282.png": { + "expert_score": "1.8181818181818181", + "mean_prediction": "0.60813594", + "type0_prediction": "0.64273095" + }, + "visMost357.png": { + "expert_score": "2.1666666666666665", + "mean_prediction": "0.6079079", + "type0_prediction": "0.62814224" + }, + "visMost362.png": { + "expert_score": "2.4", + "mean_prediction": "0.59350044", + "type0_prediction": "0.66374385" + }, + "visMost374.png": { + "expert_score": "1.8181818181818181", + "mean_prediction": "0.6206352", + "type0_prediction": "0.6854715" + }, + "visMost376.png": { + "expert_score": "2.769230769230769", + "mean_prediction": "0.62575567", + "type0_prediction": "0.6200288" + }, + "visMost378.png": { + "expert_score": "2.0588235294117645", + "mean_prediction": "0.572418", + "type0_prediction": "0.6332804" + }, + "visMost420.png": { + "expert_score": "2.0", + "mean_prediction": "0.5863609", + "type0_prediction": "0.6724539" + }, + "visMost451.png": { + "expert_score": "2.3333333333333335", + "mean_prediction": "0.5874853", + "type0_prediction": "0.65447277" + }, + "visMost456.png": { + "expert_score": "2.125", + "mean_prediction": "0.59672964", + "type0_prediction": "0.644401" + }, + "visMost468.png": { + "expert_score": "1.7142857142857142", + "mean_prediction": "0.59973586", + "type0_prediction": "0.64202434" + }, + "visMost505.png": { + "expert_score": "2.2", + "mean_prediction": "0.6024183", + "type0_prediction": "0.6229805" + }, + "visMost523.png": { + "expert_score": "2.0", + "mean_prediction": "0.62043273", + "type0_prediction": "0.6852082" + }, + "visMost526.png": { + "expert_score": "2.375", + "mean_prediction": "0.58512366", + "type0_prediction": "0.61431384" + }, + "visMost537.png": { + "expert_score": "2.3333333333333335", + "mean_prediction": "0.6163018", + "type0_prediction": "0.62139857" + }, + "visMost54.png": { + "expert_score": "2.2857142857142856", + "mean_prediction": "0.6048571", + "type0_prediction": "0.6523529" + }, + "visMost545.png": { + "expert_score": "1.3846153846153846", + "mean_prediction": "0.5910188", + "type0_prediction": "0.6257862" + }, + "visMost55.png": { + "expert_score": "2.642857142857143", + "mean_prediction": "0.6036519", + "type0_prediction": "0.6276471" + }, + "visMost575.png": { + "expert_score": "2.3333333333333335", + "mean_prediction": "0.6216319", + "type0_prediction": "0.62400144" + }, + "visMost601.png": { + "expert_score": "1.9166666666666667", + "mean_prediction": "0.6059027", + "type0_prediction": "0.65772015" + }, + "visMost623.png": { + "expert_score": "2.272727272727273", + "mean_prediction": "0.60744566", + "type0_prediction": "0.67136997" + }, + "visMost635.png": { + "expert_score": "2.0", + "mean_prediction": "0.6098933", + "type0_prediction": "0.6463094" + }, + "visMost645.png": { + "expert_score": "1.625", + "mean_prediction": "0.6094649", + "type0_prediction": "0.65341336" + }, + "visMost657.png": { + "expert_score": "1.7692307692307692", + "mean_prediction": "0.5881011", + "type0_prediction": "0.63883895" + }, + "visMost673.png": { + "expert_score": "2.1", + "mean_prediction": "0.6214426", + "type0_prediction": "0.60964966" + }, + "visMost735.png": { + "expert_score": "2.3", + "mean_prediction": "0.59261113", + "type0_prediction": "0.6577627" + }, + "visMost745.png": { + "expert_score": "2.142857142857143", + "mean_prediction": "0.6159263", + "type0_prediction": "0.60982174" + }, + "visMost755.png": { + "expert_score": "1.0", + "mean_prediction": "0.60050213", + "type0_prediction": "0.63941693" + }, + "visMost758.png": { + "expert_score": "1.375", + "mean_prediction": "0.5983196", + "type0_prediction": "0.6810266" + }, + "visMost77.png": { + "expert_score": "2.2142857142857144", + "mean_prediction": "0.6206971", + "type0_prediction": "0.68547493" + }, + "visMost82.png": { + "expert_score": "2.1666666666666665", + "mean_prediction": "0.5944812", + "type0_prediction": "0.60034335" + }, + "visMost83.png": { + "expert_score": "2.75", + "mean_prediction": "0.60406697", + "type0_prediction": "0.6121677" + }, + "visMost92.png": { + "expert_score": "1.8571428571428572", + "mean_prediction": "0.6164424", + "type0_prediction": "0.7270511" + }, + "whoB03_1.png": { + "expert_score": "1.3333333333333333", + "mean_prediction": "0.6054854", + "type0_prediction": "0.67604154" + }, + "whoB15_1.png": { + "expert_score": "2.0", + "mean_prediction": "0.59774625", + "type0_prediction": "0.67825574" + }, + "whoB24_1.png": { + "expert_score": "2.2", + "mean_prediction": "0.616918", + "type0_prediction": "0.6218122" + }, + "whoB25_2.png": { + "expert_score": "2.111111111111111", + "mean_prediction": "0.61949384", + "type0_prediction": "0.6823527" + }, + "whoB32_1.png": { + "expert_score": "0.0", + "mean_prediction": "0.62061137", + "type0_prediction": "0.62438697" + }, + "whoI11_1.png": { + "expert_score": "1.3", + "mean_prediction": "0.5989843", + "type0_prediction": "0.67188984" + }, + "whoI11_2.png": { + "expert_score": "0.8", + "mean_prediction": "0.60368663", + "type0_prediction": "0.62448007" + }, + "whoI12_2.png": { + "expert_score": "1.2222222222222223", + "mean_prediction": "0.6206637", + "type0_prediction": "0.68518955" + }, + "whoI14.png": { + "expert_score": "1.0", + "mean_prediction": "0.5961464", + "type0_prediction": "0.6234086" + }, + "whoI19.png": { + "expert_score": "2.0", + "mean_prediction": "0.6184056", + "type0_prediction": "0.68451875" + }, + "whoI22.png": { + "expert_score": "1.0", + "mean_prediction": "0.61715937", + "type0_prediction": "0.68182427" + }, + "whoJ15_1.png": { + "expert_score": "1.0", + "mean_prediction": "0.6142695", + "type0_prediction": "0.6130049" + }, + "whoJ23.png": { + "expert_score": "1.0", + "mean_prediction": "0.62070394", + "type0_prediction": "0.6854753" + }, + "whoJ32.png": { + "expert_score": "1.0", + "mean_prediction": "0.60606843", + "type0_prediction": "0.61046827" + }, + "whoJ33.png": { + "expert_score": "1.0", + "mean_prediction": "0.6189947", + "type0_prediction": "0.6827515" + }, + "whoJ36_1.png": { + "expert_score": "0.0", + "mean_prediction": "0.6110808", + "type0_prediction": "0.61365193" + }, + "whoJ43_2.png": { + "expert_score": "0.0", + "mean_prediction": "0.60704654", + "type0_prediction": "0.66094464" + }, + "whoJ44.png": { + "expert_score": "1.0", + "mean_prediction": "0.600713", + "type0_prediction": "0.6640649" + }, + "whoJ48_2.png": { + "expert_score": "1.0", + "mean_prediction": "0.6108315", + "type0_prediction": "0.6195147" + }, + "whoK04_2.png": { + "expert_score": "1.3333333333333333", + "mean_prediction": "0.6098949", + "type0_prediction": "0.62392896" + }, + "whoK07_2.png": { + "expert_score": "0.0", + "mean_prediction": "0.6197899", + "type0_prediction": "0.6843478" + }, + "whoK12_2.png": { + "expert_score": "1.8888888888888888", + "mean_prediction": "0.611116", + "type0_prediction": "0.66007584" + }, + "whoK17_1.png": { + "expert_score": "1.75", + "mean_prediction": "0.6250388", + "type0_prediction": "0.62113214" + }, + "whoK19_1.png": { + "expert_score": "1.0666666666666667", + "mean_prediction": "0.60772306", + "type0_prediction": "0.6152569" + }, + "whoK23_2.png": { + "expert_score": "1.2727272727272727", + "mean_prediction": "0.59978724", + "type0_prediction": "0.61095214" + }, + "whoK31.png": { + "expert_score": "1.4545454545454546", + "mean_prediction": "0.60887057", + "type0_prediction": "0.68945616" + }, + "whoL03.png": { + "expert_score": "1.3333333333333333", + "mean_prediction": "0.6131156", + "type0_prediction": "0.6268712" + }, + "whoL09.png": { + "expert_score": "1.6666666666666667", + "mean_prediction": "0.59864765", + "type0_prediction": "0.64444995" + }, + "whoL10.png": { + "expert_score": "0.7777777777777778", + "mean_prediction": "0.6081171", + "type0_prediction": "0.6271273" + }, + "whoL11.png": { + "expert_score": "1.5555555555555556", + "mean_prediction": "0.59783524", + "type0_prediction": "0.65505046" + }, + "whoL12.png": { + "expert_score": "1.7", + "mean_prediction": "0.60573554", + "type0_prediction": "0.6779009" + }, + "whoL14.png": { + "expert_score": "0.8888888888888888", + "mean_prediction": "0.6203007", + "type0_prediction": "0.68435746" + }, + "whoN05.png": { + "expert_score": "2.0", + "mean_prediction": "0.5832179", + "type0_prediction": "0.64087254" + }, + "whoN08.png": { + "expert_score": "0.5", + "mean_prediction": "0.59934014", + "type0_prediction": "0.61093664" + }, + "whoN10.png": { + "expert_score": "1.75", + "mean_prediction": "0.6151645", + "type0_prediction": "0.62064046" + }, + "whoN16_1.png": { + "expert_score": "0.5", + "mean_prediction": "0.6131289", + "type0_prediction": "0.62101287" + }, + "whoN18.png": { + "expert_score": "1.1666666666666667", + "mean_prediction": "0.609395", + "type0_prediction": "0.6149272" + }, + "whoN21_1.png": { + "expert_score": "0.5", + "mean_prediction": "0.59603864", + "type0_prediction": "0.67229545" + }, + "whoN22.png": { + "expert_score": "0.875", + "mean_prediction": "0.6150968", + "type0_prediction": "0.66681224" + }, + "whoN23_2.png": { + "expert_score": "3.0", + "mean_prediction": "0.60255766", + "type0_prediction": "0.6224528" + }, + "whoN32_2.png": { + "expert_score": "1.6", + "mean_prediction": "0.60485274", + "type0_prediction": "0.6675169" + }, + "whoN33.png": { + "expert_score": "1.8333333333333333", + "mean_prediction": "0.59732425", + "type0_prediction": "0.64179194" + }, + "whoO06_2.png": { + "expert_score": "0.6", + "mean_prediction": "0.5773088", + "type0_prediction": "0.6328603" + }, + "whoO12.png": { + "expert_score": "3.0", + "mean_prediction": "0.6140063", + "type0_prediction": "0.6143204" + }, + "whoP16.png": { + "expert_score": "1.5", + "mean_prediction": "0.6131382", + "type0_prediction": "0.62140185" + }, + "whoQ09_2.png": { + "expert_score": "1.5", + "mean_prediction": "0.59462816", + "type0_prediction": "0.6815767" + }, + "whoQ11_1.png": { + "expert_score": "1.0", + "mean_prediction": "0.61492884", + "type0_prediction": "0.6871842" + }, + "whoQ14_2.png": { + "expert_score": "0.3333333333333333", + "mean_prediction": "0.61456245", + "type0_prediction": "0.6189001" + }, + "whoQ15_1.png": { + "expert_score": "0.75", + "mean_prediction": "0.59318775", + "type0_prediction": "0.6414652" + }, + "whoQ18_3.png": { + "expert_score": "0.0", + "mean_prediction": "0.60444295", + "type0_prediction": "0.65633595" + }, + "whoQ26.png": { + "expert_score": "1.1111111111111112", + "mean_prediction": "0.61499333", + "type0_prediction": "0.6162643" + }, + "whoQ32_2.png": { + "expert_score": "0.0", + "mean_prediction": "0.6153818", + "type0_prediction": "0.6153889" + }, + "whoQ41_1.png": { + "expert_score": "1.75", + "mean_prediction": "0.6158834", + "type0_prediction": "0.664997" + }, + "whoQ42_1.png": { + "expert_score": "1.4", + "mean_prediction": "0.5968758", + "type0_prediction": "0.6573105" + }, + "whoQ44_4.png": { + "expert_score": "0.8333333333333334", + "mean_prediction": "0.618357", + "type0_prediction": "0.6836711" + }, + "whoQ48_4.png": { + "expert_score": "0.8571428571428571", + "mean_prediction": "0.604703", + "type0_prediction": "0.6643026" + }, + "whoQ48_5.png": { + "expert_score": "0.75", + "mean_prediction": "0.6043172", + "type0_prediction": "0.65769404" + }, + "whoQ50_2.png": { + "expert_score": "1.0", + "mean_prediction": "0.6184259", + "type0_prediction": "0.63668835" + }, + "whoQ51_2.png": { + "expert_score": "0.8333333333333334", + "mean_prediction": "0.60203475", + "type0_prediction": "0.65946895" + }, + "whoQ52_4.png": { + "expert_score": "1.5", + "mean_prediction": "0.61095357", + "type0_prediction": "0.6490041" + }, + "wsj10.png": { + "expert_score": "2.272727272727273", + "mean_prediction": "0.61773556", + "type0_prediction": "0.6276526" + }, + "wsj104.png": { + "expert_score": "1.9230769230769231", + "mean_prediction": "0.5979839", + "type0_prediction": "0.6731855" + }, + "wsj108.png": { + "expert_score": "1.5", + "mean_prediction": "0.6017605", + "type0_prediction": "0.6617424" + }, + "wsj11.png": { + "expert_score": "2.0", + "mean_prediction": "0.6142933", + "type0_prediction": "0.60718745" + }, + "wsj116.png": { + "expert_score": "2.0", + "mean_prediction": "0.6066037", + "type0_prediction": "0.60557336" + }, + "wsj129.png": { + "expert_score": "1.4545454545454546", + "mean_prediction": "0.60501254", + "type0_prediction": "0.6611961" + }, + "wsj144.png": { + "expert_score": "1.4444444444444444", + "mean_prediction": "0.6248475", + "type0_prediction": "0.61740226" + }, + "wsj147.png": { + "expert_score": "2.1666666666666665", + "mean_prediction": "0.6190906", + "type0_prediction": "0.68861765" + }, + "wsj162.png": { + "expert_score": "2.9166666666666665", + "mean_prediction": "0.6083674", + "type0_prediction": "0.6941575" + }, + "wsj167.png": { + "expert_score": "1.3333333333333333", + "mean_prediction": "0.6038179", + "type0_prediction": "0.61909336" + }, + "wsj170.png": { + "expert_score": "0.75", + "mean_prediction": "0.6220658", + "type0_prediction": "0.67964464" + }, + "wsj172.png": { + "expert_score": "1.1666666666666667", + "mean_prediction": "0.608501", + "type0_prediction": "0.6228946" + }, + "wsj176.png": { + "expert_score": "1.5", + "mean_prediction": "0.6140317", + "type0_prediction": "0.6720224" + }, + "wsj184.png": { + "expert_score": "1.5", + "mean_prediction": "0.5968137", + "type0_prediction": "0.637487" + }, + "wsj20.png": { + "expert_score": "2.25", + "mean_prediction": "0.6201169", + "type0_prediction": "0.6848236" + }, + "wsj21.png": { + "expert_score": "2.2", + "mean_prediction": "0.580458", + "type0_prediction": "0.6775363" + }, + "wsj214.png": { + "expert_score": "2.0", + "mean_prediction": "0.62013805", + "type0_prediction": "0.6190731" + }, + "wsj220.png": { + "expert_score": "1.5", + "mean_prediction": "0.61162263", + "type0_prediction": "0.61598086" + }, + "wsj226.png": { + "expert_score": "1.8888888888888888", + "mean_prediction": "0.6100644", + "type0_prediction": "0.67237806" + }, + "wsj233.png": { + "expert_score": "2.3846153846153846", + "mean_prediction": "0.6182009", + "type0_prediction": "0.6094952" + }, + "wsj240.png": { + "expert_score": "1.4285714285714286", + "mean_prediction": "0.62312", + "type0_prediction": "0.6201723" + }, + "wsj259.png": { + "expert_score": "2.4285714285714284", + "mean_prediction": "0.6079014", + "type0_prediction": "0.6855644" + }, + "wsj262.png": { + "expert_score": "2.230769230769231", + "mean_prediction": "0.58680624", + "type0_prediction": "0.6027097" + }, + "wsj264.png": { + "expert_score": "1.4615384615384615", + "mean_prediction": "0.60944563", + "type0_prediction": "0.6723376" + }, + "wsj270.png": { + "expert_score": "1.7777777777777777", + "mean_prediction": "0.62300086", + "type0_prediction": "0.60853285" + }, + "wsj271.png": { + "expert_score": "2.2", + "mean_prediction": "0.6027496", + "type0_prediction": "0.61026865" + }, + "wsj28.png": { + "expert_score": "1.0", + "mean_prediction": "0.6005725", + "type0_prediction": "0.6955757" + }, + "wsj286.png": { + "expert_score": "1.5", + "mean_prediction": "0.602205", + "type0_prediction": "0.6588508" + }, + "wsj292.png": { + "expert_score": "2.2", + "mean_prediction": "0.6121757", + "type0_prediction": "0.6092938" + }, + "wsj294.png": { + "expert_score": "2.375", + "mean_prediction": "0.61569893", + "type0_prediction": "0.6208503" + }, + "wsj297.png": { + "expert_score": "1.8571428571428572", + "mean_prediction": "0.5989543", + "type0_prediction": "0.6649289" + }, + "wsj299.png": { + "expert_score": "2.1818181818181817", + "mean_prediction": "0.6051423", + "type0_prediction": "0.6752655" + }, + "wsj308.png": { + "expert_score": "1.4285714285714286", + "mean_prediction": "0.61003816", + "type0_prediction": "0.60690546" + }, + "wsj316.png": { + "expert_score": "1.375", + "mean_prediction": "0.6100318", + "type0_prediction": "0.6700202" + }, + "wsj340.png": { + "expert_score": "1.375", + "mean_prediction": "0.60130394", + "type0_prediction": "0.60803014" + }, + "wsj359.png": { + "expert_score": "1.8571428571428572", + "mean_prediction": "0.59416246", + "type0_prediction": "0.63225895" + }, + "wsj360.png": { + "expert_score": "0.0", + "mean_prediction": "0.6171618", + "type0_prediction": "0.6207669" + }, + "wsj392.png": { + "expert_score": "2.0", + "mean_prediction": "0.60224444", + "type0_prediction": "0.60939544" + }, + "wsj395.png": { + "expert_score": "1.0", + "mean_prediction": "0.61262494", + "type0_prediction": "0.68072736" + }, + "wsj405.png": { + "expert_score": "2.0", + "mean_prediction": "0.6039667", + "type0_prediction": "0.666097" + }, + "wsj441.png": { + "expert_score": "2.3", + "mean_prediction": "0.6222627", + "type0_prediction": "0.6152519" + }, + "wsj459.png": { + "expert_score": "2.3333333333333335", + "mean_prediction": "0.6130302", + "type0_prediction": "0.63472694" + }, + "wsj462.png": { + "expert_score": "1.625", + "mean_prediction": "0.61105555", + "type0_prediction": "0.65729415" + }, + "wsj474.png": { + "expert_score": "1.875", + "mean_prediction": "0.5946794", + "type0_prediction": "0.6762944" + }, + "wsj481.png": { + "expert_score": "2.125", + "mean_prediction": "0.59432137", + "type0_prediction": "0.60720557" + }, + "wsj505.png": { + "expert_score": "2.7142857142857144", + "mean_prediction": "0.6189315", + "type0_prediction": "0.61387897" + }, + "wsj508.png": { + "expert_score": "1.25", + "mean_prediction": "0.6108691", + "type0_prediction": "0.6140786" + }, + "wsj511.png": { + "expert_score": "1.9230769230769231", + "mean_prediction": "0.61884344", + "type0_prediction": "0.6120235" + }, + "wsj52.png": { + "expert_score": "2.1875", + "mean_prediction": "0.62004066", + "type0_prediction": "0.6926921" + }, + "wsj521.png": { + "expert_score": "2.0", + "mean_prediction": "0.60643303", + "type0_prediction": "0.62309235" + }, + "wsj529.png": { + "expert_score": "1.6666666666666667", + "mean_prediction": "0.5830598", + "type0_prediction": "0.6055927" + }, + "wsj533.png": { + "expert_score": "1.8333333333333333", + "mean_prediction": "0.59500945", + "type0_prediction": "0.6247512" + }, + "wsj536.png": { + "expert_score": "2.0", + "mean_prediction": "0.60739934", + "type0_prediction": "0.6004783" + }, + "wsj54.png": { + "expert_score": "2.4", + "mean_prediction": "0.59857804", + "type0_prediction": "0.61043245" + }, + "wsj540.png": { + "expert_score": "1.625", + "mean_prediction": "0.6172153", + "type0_prediction": "0.61701214" + }, + "wsj55.png": { + "expert_score": "1.5", + "mean_prediction": "0.5929787", + "type0_prediction": "0.62133396" + }, + "wsj557.png": { + "expert_score": "2.0", + "mean_prediction": "0.61045426", + "type0_prediction": "0.6700942" + }, + "wsj561.png": { + "expert_score": "2.1818181818181817", + "mean_prediction": "0.5914847", + "type0_prediction": "0.60710984" + }, + "wsj612.png": { + "expert_score": "2.125", + "mean_prediction": "0.5982393", + "type0_prediction": "0.61593604" + }, + "wsj79.png": { + "expert_score": "2.4", + "mean_prediction": "0.60665363", + "type0_prediction": "0.6006525" + }, + "wsj9.png": { + "expert_score": "2.5", + "mean_prediction": "0.59658015", + "type0_prediction": "0.6401547" + }, + "wsj99.png": { + "expert_score": "2.0833333333333335", + "mean_prediction": "0.6135405", + "type0_prediction": "0.6242973" + } +} \ No newline at end of file diff --git a/RecallNet/notebooks/train_RecallNet.ipynb b/RecallNet/notebooks/train_RecallNet.ipynb new file mode 100644 index 0000000..03ad027 --- /dev/null +++ b/RecallNet/notebooks/train_RecallNet.ipynb @@ -0,0 +1,984 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using TensorFlow backend.\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:516: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:517: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:518: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:519: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:520: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:525: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:541: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:542: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:543: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:544: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:545: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:550: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import keras\n", + "import sys\n", + "import os, glob\n", + "from keras.models import Model\n", + "import tensorflow as tf\n", + "from keras.utils import Sequence\n", + "from keras.optimizers import Adam\n", + "from keras.callbacks import ModelCheckpoint, LearningRateScheduler\n", + "#from IPython.display import clear_output\n", + "import tqdm \n", + "import math\n", + "\n", + "sys.path.append('../src')\n", + "\n", + "from util import get_model_by_name\n", + "\n", + "from sal_imp_utilities import *\n", + "from cb import InteractivePlot\n", + "\n", + "config = tf.ConfigProto()\n", + "config.gpu_options.allow_growth = True\n", + "sess = tf.Session(config=config)\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mon May 9 14:27:53 2022 \n", + "+-----------------------------------------------------------------------------+\n", + "| NVIDIA-SMI 470.103.01 Driver Version: 470.103.01 CUDA Version: 11.4 |\n", + "|-------------------------------+----------------------+----------------------+\n", + "| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n", + "| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n", + "| | | MIG M. |\n", + "|===============================+======================+======================|\n", + "| 0 NVIDIA GeForce ... Off | 00000000:29:00.0 On | N/A |\n", + "| 30% 41C P2 38W / 184W | 1027MiB / 7959MiB | 2% Default |\n", + "| | | N/A |\n", + "+-------------------------------+----------------------+----------------------+\n", + " \n", + "+-----------------------------------------------------------------------------+\n", + "| Processes: |\n", + "| GPU GI CI PID Type Process name GPU Memory |\n", + "| ID ID Usage |\n", + "|=============================================================================|\n", + "| 0 N/A N/A 1377 G /usr/lib/xorg/Xorg 95MiB |\n", + "| 0 N/A N/A 2243 G /usr/lib/xorg/Xorg 432MiB |\n", + "| 0 N/A N/A 2378 G /usr/bin/gnome-shell 72MiB |\n", + "| 0 N/A N/A 3521 G ...AAAAAAAAA= --shared-files 16MiB |\n", + "| 0 N/A N/A 5912 G ...RendererForSitePerProcess 87MiB |\n", + "| 0 N/A N/A 18975 G ...sktop/bin/mendeleydesktop 42MiB |\n", + "| 0 N/A N/A 168057 G ...178058406726361824,131072 146MiB |\n", + "| 0 N/A N/A 179935 C .../envs/tf-cuda9/bin/python 87MiB |\n", + "+-----------------------------------------------------------------------------+\n" + ] + } + ], + "source": [ + "%%bash\n", + "nvidia-smi" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'0'" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.environ[\"CUDA_VISIBLE_DEVICES\"] = '0'\n", + "os.environ[\"CUDA_VISIBLE_DEVICES\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ENV" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "data_path = '/your/path/VisRecall/'\n", + "# 0: T, 1: FE, 2: F, 3: RV, 4: U\n", + "TYPE = 0\n", + "split = 0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Load data" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "TYPE_Q = ['T','FE','F','RV','U']\n", + "bp_imp = data_path + 'merged/src/'\n", + "training_set = np.load(data_path + 'training_data/%s-question/train_split%d.npy'%(TYPE_Q[TYPE], split),allow_pickle=True)\n", + "val_set = np.load(data_path + 'training_data/%s-question/val_split%d.npy'%(TYPE_Q[TYPE], split),allow_pickle=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "train_filename = []\n", + "train_label = []\n", + "train_mean = []\n", + "train_type = []\n", + "\n", + "for data in training_set:\n", + " one_hot = [0,0,0,0,0,0]\n", + " one_hot[data['vistype']] = 1\n", + " train_filename.append(bp_imp+data['name'])\n", + " train_label.append(one_hot)\n", + " train_mean.append(data['norm_mean_acc_withD'])\n", + " train_type.append(data['norm_%d_withD'%(TYPE)])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "val_filename = []\n", + "val_label = []\n", + "val_mean = []\n", + "val_type = []\n", + "for data in val_set:\n", + " one_hot = [0,0,0,0,0,0]\n", + " one_hot[data['vistype']] = 1\n", + " val_filename.append(bp_imp+data['name'])\n", + " val_label.append(one_hot)\n", + " val_mean.append(data['norm_mean_acc_withD'])\n", + " val_type.append(data['norm_%d_withD'%(TYPE)])\n", + "#val_filename" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Model and training params" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# FILL THESE IN: set training parameters \n", + "ckpt_savedir = \"ckpt\"\n", + "\n", + "load_weights = False\n", + "weightspath = \"\"\n", + "\n", + "batch_size = 4\n", + "init_lr = 0.002\n", + "lr_reduce_by = .1\n", + "reduce_at_epoch = 3\n", + "n_epochs = 15\n", + "\n", + "opt = Adam(lr=init_lr) \n", + "\n", + "\n", + "model_name = \"RecallNet_xception\"\n", + "\n", + "model_inp_size = (240, 320)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "input_shape = model_inp_size + (3,)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:From /netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:4070: The name tf.nn.max_pool is deprecated. Please use tf.nn.max_pool2d instead.\n", + "\n", + "xception output shapes: (?, 30, 40, 2048)\n", + "Model: \"model_1\"\n", + "__________________________________________________________________________________________________\n", + "Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + "input_1 (InputLayer) (None, 240, 320, 3) 0 \n", + "__________________________________________________________________________________________________\n", + "block1_conv1 (Conv2D) (None, 119, 159, 32) 864 input_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block1_conv1_bn (BatchNormaliza (None, 119, 159, 32) 128 block1_conv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block1_conv1_act (Activation) (None, 119, 159, 32) 0 block1_conv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block1_conv2 (Conv2D) (None, 117, 157, 64) 18432 block1_conv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block1_conv2_bn (BatchNormaliza (None, 117, 157, 64) 256 block1_conv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block1_conv2_act (Activation) (None, 117, 157, 64) 0 block1_conv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block2_sepconv1 (SeparableConv2 (None, 117, 157, 128 8768 block1_conv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block2_sepconv1_bn (BatchNormal (None, 117, 157, 128 512 block2_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block2_sepconv2_act (Activation (None, 117, 157, 128 0 block2_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block2_sepconv2 (SeparableConv2 (None, 117, 157, 128 17536 block2_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block2_sepconv2_bn (BatchNormal (None, 117, 157, 128 512 block2_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_1 (Conv2D) (None, 59, 79, 128) 8192 block1_conv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block2_pool (MaxPooling2D) (None, 59, 79, 128) 0 block2_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_1 (BatchNor (None, 59, 79, 128) 512 conv2d_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_1 (Add) (None, 59, 79, 128) 0 block2_pool[0][0] \n", + " batch_normalization_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block3_sepconv1_act (Activation (None, 59, 79, 128) 0 add_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block3_sepconv1 (SeparableConv2 (None, 59, 79, 256) 33920 block3_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block3_sepconv1_bn (BatchNormal (None, 59, 79, 256) 1024 block3_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block3_sepconv2_act (Activation (None, 59, 79, 256) 0 block3_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block3_sepconv2 (SeparableConv2 (None, 59, 79, 256) 67840 block3_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block3_sepconv2_bn (BatchNormal (None, 59, 79, 256) 1024 block3_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_2 (Conv2D) (None, 30, 40, 256) 32768 add_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block3_pool (MaxPooling2D) (None, 30, 40, 256) 0 block3_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_2 (BatchNor (None, 30, 40, 256) 1024 conv2d_2[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_2 (Add) (None, 30, 40, 256) 0 block3_pool[0][0] \n", + " batch_normalization_2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block4_sepconv1_act (Activation (None, 30, 40, 256) 0 add_2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block4_sepconv1 (SeparableConv2 (None, 30, 40, 728) 188672 block4_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block4_sepconv1_bn (BatchNormal (None, 30, 40, 728) 2912 block4_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block4_sepconv2_act (Activation (None, 30, 40, 728) 0 block4_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block4_sepconv2 (SeparableConv2 (None, 30, 40, 728) 536536 block4_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block4_sepconv2_bn (BatchNormal (None, 30, 40, 728) 2912 block4_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_3 (Conv2D) (None, 30, 40, 728) 186368 add_2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block4_pool (MaxPooling2D) (None, 30, 40, 728) 0 block4_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_3 (BatchNor (None, 30, 40, 728) 2912 conv2d_3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_3 (Add) (None, 30, 40, 728) 0 block4_pool[0][0] \n", + " batch_normalization_3[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv1_act (Activation (None, 30, 40, 728) 0 add_3[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv1 (SeparableConv2 (None, 30, 40, 728) 536536 block5_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv1_bn (BatchNormal (None, 30, 40, 728) 2912 block5_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv2_act (Activation (None, 30, 40, 728) 0 block5_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv2 (SeparableConv2 (None, 30, 40, 728) 536536 block5_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv2_bn (BatchNormal (None, 30, 40, 728) 2912 block5_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv3_act (Activation (None, 30, 40, 728) 0 block5_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv3 (SeparableConv2 (None, 30, 40, 728) 536536 block5_sepconv3_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block5_sepconv3_bn (BatchNormal (None, 30, 40, 728) 2912 block5_sepconv3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_4 (Add) (None, 30, 40, 728) 0 block5_sepconv3_bn[0][0] \n", + " add_3[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv1_act (Activation (None, 30, 40, 728) 0 add_4[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv1 (SeparableConv2 (None, 30, 40, 728) 536536 block6_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv1_bn (BatchNormal (None, 30, 40, 728) 2912 block6_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv2_act (Activation (None, 30, 40, 728) 0 block6_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv2 (SeparableConv2 (None, 30, 40, 728) 536536 block6_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv2_bn (BatchNormal (None, 30, 40, 728) 2912 block6_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv3_act (Activation (None, 30, 40, 728) 0 block6_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv3 (SeparableConv2 (None, 30, 40, 728) 536536 block6_sepconv3_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block6_sepconv3_bn (BatchNormal (None, 30, 40, 728) 2912 block6_sepconv3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_5 (Add) (None, 30, 40, 728) 0 block6_sepconv3_bn[0][0] \n", + " add_4[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv1_act (Activation (None, 30, 40, 728) 0 add_5[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv1 (SeparableConv2 (None, 30, 40, 728) 536536 block7_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv1_bn (BatchNormal (None, 30, 40, 728) 2912 block7_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv2_act (Activation (None, 30, 40, 728) 0 block7_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv2 (SeparableConv2 (None, 30, 40, 728) 536536 block7_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv2_bn (BatchNormal (None, 30, 40, 728) 2912 block7_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv3_act (Activation (None, 30, 40, 728) 0 block7_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv3 (SeparableConv2 (None, 30, 40, 728) 536536 block7_sepconv3_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block7_sepconv3_bn (BatchNormal (None, 30, 40, 728) 2912 block7_sepconv3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_6 (Add) (None, 30, 40, 728) 0 block7_sepconv3_bn[0][0] \n", + " add_5[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv1_act (Activation (None, 30, 40, 728) 0 add_6[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv1 (SeparableConv2 (None, 30, 40, 728) 536536 block8_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv1_bn (BatchNormal (None, 30, 40, 728) 2912 block8_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv2_act (Activation (None, 30, 40, 728) 0 block8_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv2 (SeparableConv2 (None, 30, 40, 728) 536536 block8_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv2_bn (BatchNormal (None, 30, 40, 728) 2912 block8_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv3_act (Activation (None, 30, 40, 728) 0 block8_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv3 (SeparableConv2 (None, 30, 40, 728) 536536 block8_sepconv3_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block8_sepconv3_bn (BatchNormal (None, 30, 40, 728) 2912 block8_sepconv3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_7 (Add) (None, 30, 40, 728) 0 block8_sepconv3_bn[0][0] \n", + " add_6[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv1_act (Activation (None, 30, 40, 728) 0 add_7[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv1 (SeparableConv2 (None, 30, 40, 728) 536536 block9_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv1_bn (BatchNormal (None, 30, 40, 728) 2912 block9_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv2_act (Activation (None, 30, 40, 728) 0 block9_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv2 (SeparableConv2 (None, 30, 40, 728) 536536 block9_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv2_bn (BatchNormal (None, 30, 40, 728) 2912 block9_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv3_act (Activation (None, 30, 40, 728) 0 block9_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv3 (SeparableConv2 (None, 30, 40, 728) 536536 block9_sepconv3_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block9_sepconv3_bn (BatchNormal (None, 30, 40, 728) 2912 block9_sepconv3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_8 (Add) (None, 30, 40, 728) 0 block9_sepconv3_bn[0][0] \n", + " add_7[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv1_act (Activatio (None, 30, 40, 728) 0 add_8[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv1 (SeparableConv (None, 30, 40, 728) 536536 block10_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv1_bn (BatchNorma (None, 30, 40, 728) 2912 block10_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv2_act (Activatio (None, 30, 40, 728) 0 block10_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv2 (SeparableConv (None, 30, 40, 728) 536536 block10_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv2_bn (BatchNorma (None, 30, 40, 728) 2912 block10_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv3_act (Activatio (None, 30, 40, 728) 0 block10_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv3 (SeparableConv (None, 30, 40, 728) 536536 block10_sepconv3_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block10_sepconv3_bn (BatchNorma (None, 30, 40, 728) 2912 block10_sepconv3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_9 (Add) (None, 30, 40, 728) 0 block10_sepconv3_bn[0][0] \n", + " add_8[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv1_act (Activatio (None, 30, 40, 728) 0 add_9[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv1 (SeparableConv (None, 30, 40, 728) 536536 block11_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv1_bn (BatchNorma (None, 30, 40, 728) 2912 block11_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv2_act (Activatio (None, 30, 40, 728) 0 block11_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv2 (SeparableConv (None, 30, 40, 728) 536536 block11_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv2_bn (BatchNorma (None, 30, 40, 728) 2912 block11_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv3_act (Activatio (None, 30, 40, 728) 0 block11_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv3 (SeparableConv (None, 30, 40, 728) 536536 block11_sepconv3_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block11_sepconv3_bn (BatchNorma (None, 30, 40, 728) 2912 block11_sepconv3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_10 (Add) (None, 30, 40, 728) 0 block11_sepconv3_bn[0][0] \n", + " add_9[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv1_act (Activatio (None, 30, 40, 728) 0 add_10[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv1 (SeparableConv (None, 30, 40, 728) 536536 block12_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv1_bn (BatchNorma (None, 30, 40, 728) 2912 block12_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv2_act (Activatio (None, 30, 40, 728) 0 block12_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv2 (SeparableConv (None, 30, 40, 728) 536536 block12_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv2_bn (BatchNorma (None, 30, 40, 728) 2912 block12_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv3_act (Activatio (None, 30, 40, 728) 0 block12_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv3 (SeparableConv (None, 30, 40, 728) 536536 block12_sepconv3_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block12_sepconv3_bn (BatchNorma (None, 30, 40, 728) 2912 block12_sepconv3[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_11 (Add) (None, 30, 40, 728) 0 block12_sepconv3_bn[0][0] \n", + " add_10[0][0] \n", + "__________________________________________________________________________________________________\n", + "block13_sepconv1_act (Activatio (None, 30, 40, 728) 0 add_11[0][0] \n", + "__________________________________________________________________________________________________\n", + "block13_sepconv1 (SeparableConv (None, 30, 40, 728) 536536 block13_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block13_sepconv1_bn (BatchNorma (None, 30, 40, 728) 2912 block13_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block13_sepconv2_act (Activatio (None, 30, 40, 728) 0 block13_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block13_sepconv2 (SeparableConv (None, 30, 40, 1024) 752024 block13_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block13_sepconv2_bn (BatchNorma (None, 30, 40, 1024) 4096 block13_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_4 (Conv2D) (None, 30, 40, 1024) 745472 add_11[0][0] \n", + "__________________________________________________________________________________________________\n", + "block13_pool (MaxPooling2D) (None, 30, 40, 1024) 0 block13_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_4 (BatchNor (None, 30, 40, 1024) 4096 conv2d_4[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_12 (Add) (None, 30, 40, 1024) 0 block13_pool[0][0] \n", + " batch_normalization_4[0][0] \n", + "__________________________________________________________________________________________________\n", + "block14_sepconv1 (SeparableConv (None, 30, 40, 1536) 1582080 add_12[0][0] \n", + "__________________________________________________________________________________________________\n", + "block14_sepconv1_bn (BatchNorma (None, 30, 40, 1536) 6144 block14_sepconv1[0][0] \n", + "__________________________________________________________________________________________________\n", + "block14_sepconv1_act (Activatio (None, 30, 40, 1536) 0 block14_sepconv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "block14_sepconv2 (SeparableConv (None, 30, 40, 2048) 3159552 block14_sepconv1_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "block14_sepconv2_bn (BatchNorma (None, 30, 40, 2048) 8192 block14_sepconv2[0][0] \n", + "__________________________________________________________________________________________________\n", + "block14_sepconv2_act (Activatio (None, 30, 40, 2048) 0 block14_sepconv2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "global_conv (Conv2D) (None, 10, 14, 256) 4718592 block14_sepconv2_act[0][0] \n", + "__________________________________________________________________________________________________\n", + "global_BN (BatchNormalization) (None, 10, 14, 256) 1024 global_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_1 (Activation) (None, 10, 14, 256) 0 global_BN[0][0] \n", + "__________________________________________________________________________________________________\n", + "dropout_1 (Dropout) (None, 10, 14, 256) 0 activation_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "global_average_pooling2d_1 (Glo (None, 256) 0 dropout_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "global_dense (Dense) (None, 256) 65792 global_average_pooling2d_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "dropout_2 (Dropout) (None, 256) 0 global_dense[0][0] \n", + "__________________________________________________________________________________________________\n", + "out_mean_acc (Dense) (None, 1) 257 dropout_2[0][0] \n", + "__________________________________________________________________________________________________\n", + "out_type0_acc (Dense) (None, 1) 257 dropout_2[0][0] \n", + "==================================================================================================\n", + "Total params: 25,647,402\n", + "Trainable params: 25,592,362\n", + "Non-trainable params: 55,040\n", + "__________________________________________________________________________________________________\n" + ] + } + ], + "source": [ + "# get model \n", + "model_params = {\n", + " 'input_shape': input_shape,\n", + " #'n_outs': len(losses),\n", + " 'n_outs': 2\n", + "}\n", + "model_func, mode = get_model_by_name(model_name)\n", + "#assert mode == \"simple\", \"%s is a multi-duration model! Please use the multi-duration notebook to train.\" % model_name\n", + "model = model_func(**model_params)\n", + "\n", + "if load_weights: \n", + " model.load_weights(weightspath)\n", + " print(\"load\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Checkpoints will be saved with format ckpt/RecallNet_xception/RecallNet_xception_ep{epoch:02d}_valloss{val_loss:.4f}.hdf5\n" + ] + } + ], + "source": [ + "# set up data generation and checkpoints\n", + "if not os.path.exists(ckpt_savedir): \n", + " os.makedirs(ckpt_savedir)\n", + "\n", + "\n", + "# Generators\n", + "gen_train = RecallNet_Generator(train_filename,\n", + " train_label,\n", + " train_mean,\n", + " train_type,\n", + " batch_size = 4)\n", + "\n", + "gen_val = RecallNet_Generator(val_filename,\n", + " val_label,\n", + " val_mean,\n", + " val_type,\n", + " 1)\n", + "\n", + "# Callbacks\n", + "\n", + "# where to save checkpoints\n", + "#filepath = os.path.join(ckpt_savedir, dataset_sal + \"_\" + l_str + '_ep{epoch:02d}_valloss{val_loss:.4f}.hdf5')\n", + "filepath = os.path.join(ckpt_savedir, model_name, model_name+'_ep{epoch:02d}_valloss{val_loss:.4f}.hdf5')\n", + "\n", + "print(\"Checkpoints will be saved with format %s\" % filepath)\n", + "\n", + "cb_chk = ModelCheckpoint(filepath, monitor='val_loss', verbose=1, save_weights_only=False, period=1)\n", + "cb_plot = InteractivePlot()\n", + "\n", + "def step_decay(epoch):\n", + " lrate = init_lr * math.pow(lr_reduce_by, math.floor((1+epoch)/reduce_at_epoch))\n", + " if epoch%reduce_at_epoch:\n", + " print('Reducing lr. New lr is:', lrate)\n", + " return lrate\n", + "cb_sched = LearningRateScheduler(step_decay)\n", + "\n", + "cbs = [cb_chk, cb_sched, cb_plot]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[array([0.74688797, 0.84647303, 0.93360996, 0.8340249 ]), array([0.7826087 , 0.95652174, 1. , 0.86956522])]\n" + ] + } + ], + "source": [ + "#test the generator \n", + "batch_img, out= gen_train.__getitem__(1)\n", + "print(out)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Train" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#model.compile(optimizer=opt, loss={'out_mean_acc': 'mean_squared_error', 'out_type0_acc':'mean_squared_error','out_classif':'binary_crossentropy'}, loss_weights={'out_mean_acc': 3, 'out_type0_acc': 3, 'out_classif': 1})\n", + "model.compile(optimizer=opt, loss={'out_mean_acc': 'mean_squared_error', 'out_type0_acc':'mean_squared_error'}, loss_weights={'out_mean_acc': 1, 'out_type0_acc': 1})\n", + "\n", + "print('Ready to train')\n", + "model.fit_generator(gen_train, epochs=n_epochs, verbose=1, callbacks=cbs, validation_data=gen_val, max_queue_size=10, workers=5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## validation" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "load\n" + ] + } + ], + "source": [ + "data_path = '/your/path/VisRecall/'\n", + "\n", + "if True:\n", + " W = \"./ckpt/RecallNet/U-question/Fold4/RecallNet_xception_ep10_valloss0.0313.hdf5\"\n", + " model.load_weights(W)\n", + " print('load')" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "avg, type: 0.02553353417062307 0.02617591625785007\n" + ] + } + ], + "source": [ + "from sklearn.metrics import mean_squared_error\n", + "\n", + "mean_list = []\n", + "type_list = []\n", + "\n", + "num_t = 0.0\n", + "\n", + "for i in range(len(val_filename)):\n", + " img = preprocess_images([val_filename[i]], 240, 320)\n", + " preds = model.predict(img)\n", + " #if(np.argmax(preds[2][0]) == np.argmax(val_label[i])):\n", + " # num_t += 1\n", + " mean_acc = preds[0][0]\n", + " type_acc = preds[1][0]\n", + " mean_list.append(mean_squared_error([val_mean[i]], mean_acc))\n", + " type_list.append(mean_squared_error([val_type[i]], type_acc))\n", + " #print(val_label[i])\n", + "\n", + "#print('classificaion: ', num_t/len(val_filename))\n", + "print('avg, type: ', np.mean(mean_list),np.mean(type_list))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.metrics import mean_squared_error" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "load\n", + "[(0.1154690275375791, 0.07620564377135046)]\n", + "load\n", + "[(0.1154690275375791, 0.07620564377135046), (0.10878741427577963, 0.2667425108749781)]\n", + "load\n", + "[(0.1154690275375791, 0.07620564377135046), (0.10878741427577963, 0.2667425108749781), (0.5932855723937102, 0.38129302771926993)]\n", + "load\n", + "[(0.1154690275375791, 0.07620564377135046), (0.10878741427577963, 0.2667425108749781), (0.5932855723937102, 0.38129302771926993), (0.015003968232081454, 0.06507362662601399)]\n", + "load\n", + "[(0.1154690275375791, 0.07620564377135046), (0.10878741427577963, 0.2667425108749781), (0.5932855723937102, 0.38129302771926993), (0.015003968232081454, 0.06507362662601399), (0.02553353417062307, 0.02617591625785007)]\n" + ] + } + ], + "source": [ + "# 0: T, 1: FE, 2: F, 3: RV, 4: U\n", + "TYPE = 4\n", + "final = []\n", + "for split in range(5):\n", + " TYPE_Q = ['T','FE','F','RV','U']\n", + " bp_imp = data_path + 'merged/src/'\n", + " training_set = np.load(data_path + 'training_data/%s-question/train_split%d.npy'%(TYPE_Q[TYPE], split),allow_pickle=True)\n", + " val_set = np.load(data_path + 'training_data/%s-question/val_split%d.npy'%(TYPE_Q[TYPE], split),allow_pickle=True)\n", + " train_filename = []\n", + " train_label = []\n", + " train_mean = []\n", + " train_type = []\n", + "\n", + " for data in training_set:\n", + " one_hot = [0,0,0,0,0,0]\n", + " one_hot[data['vistype']] = 1\n", + " train_filename.append(bp_imp+data['name'])\n", + " train_label.append(one_hot)\n", + " train_mean.append(data['norm_mean_acc_withD'])\n", + " train_type.append(data['norm_%d_withD'%(TYPE)])\n", + " \n", + " val_filename = []\n", + " val_label = []\n", + " val_mean = []\n", + " val_type = []\n", + " for data in val_set:\n", + " one_hot = [0,0,0,0,0,0]\n", + " one_hot[data['vistype']] = 1\n", + " val_filename.append(bp_imp+data['name'])\n", + " val_label.append(one_hot)\n", + " val_mean.append(data['norm_mean_acc_withD'])\n", + " val_type.append(data['norm_%d_withD'%(TYPE)])\n", + "\n", + " mean_list = []\n", + " type_list = []\n", + "\n", + " num_t = 0.0\n", + " if True:\n", + " W = \"./ckpt/RecallNet_xception/U-question/Fold\"+str(split)+\"/RecallNet_xception_ep10.hdf5\"\n", + " model.load_weights(W)\n", + " print('load')\n", + "\n", + " for i in range(len(val_filename)):\n", + " img = preprocess_images([val_filename[i]], 240, 320)\n", + " preds = model.predict(img)\n", + " #if(np.argmax(preds[2][0]) == np.argmax(val_label[i])):\n", + " # num_t += 1\n", + " mean_acc = preds[0][0]\n", + " type_acc = preds[1][0]\n", + " mean_list.append(mean_squared_error([val_mean[i]], mean_acc))\n", + " type_list.append(mean_squared_error([val_type[i]], type_acc))\n", + " final.append((np.mean(mean_list),np.mean(type_list)))\n", + " print(final)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([0.1716159 , 0.16309815]), array([0.21483601, 0.13730111]))" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.mean(final ,axis=0),np.std(final ,axis=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Test" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/bar4.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/pie4.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/bar1.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/pie2.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/bar3.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/line1.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/bar2.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/pie1.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/line2.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/line4.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/line3.png', '/netpool/homes/wangyo/Projects/2020_luwei_VisQA/Dataset/application/src/pie3.png']\n" + ] + } + ], + "source": [ + "#W_T = \"./ckpt/VMQA_UMSI/T-question/UMSI_weight1:1/Fold0/VMQA_UMSI_ep10_valloss0.6198.hdf5\"\n", + "W_T = \"./ckpt/RecallNet_xception/T-question/Fold4/RecallNet_xception_ep10.hdf5\"\n", + "\n", + "model.load_weights(W_T)\n", + "\n", + "image_path = \"/your/path/to/src\"\n", + "list_img_targets = glob.glob(image_path + '/*.png')\n", + "print(list_img_targets)\n", + "images = preprocess_images(list_img_targets, model_inp_size[0], model_inp_size[1])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "preds_recallNet = model.predict(images)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(12, 1) [array([[0.6729137 ],\n", + " [0.62224036],\n", + " [0.6644782 ],\n", + " [0.63536835],\n", + " [0.6595377 ],\n", + " [0.6628296 ],\n", + " [0.600067 ],\n", + " [0.64756936],\n", + " [0.600191 ],\n", + " [0.6459451 ],\n", + " [0.6242438 ],\n", + " [0.60450727]], dtype=float32), array([[0.7803583 ],\n", + " [0.67262685],\n", + " [0.75816834],\n", + " [0.718869 ],\n", + " [0.7442306 ],\n", + " [0.76404536],\n", + " [0.8003189 ],\n", + " [0.7172563 ],\n", + " [0.7985541 ],\n", + " [0.81216127],\n", + " [0.6953638 ],\n", + " [0.6564585 ]], dtype=float32)]\n" + ] + } + ], + "source": [ + "print(preds_recallNet[0].shape, preds_recallNet)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "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.7.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/RecallNet/src/.ipynb_checkpoints/Untitled-checkpoint.ipynb b/RecallNet/src/.ipynb_checkpoints/Untitled-checkpoint.ipynb new file mode 100644 index 0000000..8a71010 --- /dev/null +++ b/RecallNet/src/.ipynb_checkpoints/Untitled-checkpoint.ipynb @@ -0,0 +1,183 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using TensorFlow backend.\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:516: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:517: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:518: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:519: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:520: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:525: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:541: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:542: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:543: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:544: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:545: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n", + "/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:550: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", + " np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n" + ] + } + ], + "source": [ + "from xception_custom import Xception_wrapper" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from keras.layers import Input" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[[155 225 83]\n", + " [174 33 86]\n", + " [ 24 223 10]\n", + " ...\n", + " [147 233 79]\n", + " [232 187 173]\n", + " [ 69 126 85]]\n", + "\n", + " [[166 203 47]\n", + " [111 65 37]\n", + " [210 182 244]\n", + " ...\n", + " [154 62 70]\n", + " [ 62 93 101]\n", + " [132 231 126]]\n", + "\n", + " [[ 30 110 125]\n", + " [242 45 71]\n", + " [150 10 217]\n", + " ...\n", + " [ 38 165 128]\n", + " [ 64 58 127]\n", + " [179 174 72]]\n", + "\n", + " ...\n", + "\n", + " [[159 2 99]\n", + " [201 220 158]\n", + " [170 172 13]\n", + " ...\n", + " [ 79 72 65]\n", + " [ 10 228 7]\n", + " [ 99 60 129]]\n", + "\n", + " [[187 249 6]\n", + " [ 57 166 83]\n", + " [187 243 66]\n", + " ...\n", + " [109 184 147]\n", + " [142 158 83]\n", + " [190 61 30]]\n", + "\n", + " [[146 238 74]\n", + " [156 20 43]\n", + " [ 55 217 43]\n", + " ...\n", + " [208 181 141]\n", + " [196 88 15]\n", + " [132 225 63]]]\n" + ] + }, + { + "ename": "TypeError", + "evalue": "Error converting shape to a TensorShape: only size-1 arrays can be converted to Python scalars.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/eager/execute.py\u001b[0m in \u001b[0;36mmake_shape\u001b[0;34m(v, arg_name)\u001b[0m\n\u001b[1;32m 145\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 146\u001b[0;31m \u001b[0mshape\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtensor_shape\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mas_shape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 147\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/tensor_shape.py\u001b[0m in \u001b[0;36mas_shape\u001b[0;34m(shape)\u001b[0m\n\u001b[1;32m 1203\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1204\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mTensorShape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1205\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/tensor_shape.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, dims)\u001b[0m\n\u001b[1;32m 773\u001b[0m \u001b[0;31m# Got a list of dimensions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 774\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_dims\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mas_dimension\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0md\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0md\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdims_iter\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 775\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/tensor_shape.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 773\u001b[0m \u001b[0;31m# Got a list of dimensions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 774\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_dims\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mas_dimension\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0md\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0md\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdims_iter\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 775\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/tensor_shape.py\u001b[0m in \u001b[0;36mas_dimension\u001b[0;34m(value)\u001b[0m\n\u001b[1;32m 715\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 716\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mDimension\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 717\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/framework/tensor_shape.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, value)\u001b[0m\n\u001b[1;32m 184\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 185\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_value\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 186\u001b[0m if (not isinstance(value, compat.bytes_or_text_types) and\n", + "\u001b[0;31mTypeError\u001b[0m: only size-1 arrays can be converted to Python scalars", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mxception\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mXception_wrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minclude_top\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mweights\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'imagenet'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput_tensor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpooling\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'xception:'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mxception\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moutput\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0mtest_xception_shape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36mtest_xception_shape\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0minput_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m256\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m240\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m320\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0minp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mInput\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mxception\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mXception_wrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minclude_top\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mweights\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'imagenet'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput_tensor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpooling\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'xception:'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mxception\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moutput\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/keras/engine/input_layer.py\u001b[0m in \u001b[0;36mInput\u001b[0;34m(shape, batch_shape, name, dtype, sparse, tensor)\u001b[0m\n\u001b[1;32m 176\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 177\u001b[0m \u001b[0msparse\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msparse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 178\u001b[0;31m input_tensor=tensor)\n\u001b[0m\u001b[1;32m 179\u001b[0m \u001b[0;31m# Return tensor including _keras_shape and _keras_history.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 180\u001b[0m \u001b[0;31m# Note that in this case train_output and test_output are the same pointer.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/keras/legacy/interfaces.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 89\u001b[0m warnings.warn('Update your `' + object_name + '` call to the ' +\n\u001b[1;32m 90\u001b[0m 'Keras 2 API: ' + signature, stacklevel=2)\n\u001b[0;32m---> 91\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 92\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_original_function\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 93\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/keras/engine/input_layer.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, input_shape, batch_size, batch_input_shape, dtype, input_tensor, sparse, name)\u001b[0m\n\u001b[1;32m 85\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 86\u001b[0m \u001b[0msparse\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msparse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 87\u001b[0;31m name=self.name)\n\u001b[0m\u001b[1;32m 88\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 89\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_placeholder\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py\u001b[0m in \u001b[0;36mplaceholder\u001b[0;34m(shape, ndim, dtype, sparse, name)\u001b[0m\n\u001b[1;32m 734\u001b[0m \u001b[0mdtype\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfloatx\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 735\u001b[0m x = tf_keras_backend.placeholder(\n\u001b[0;32m--> 736\u001b[0;31m shape=shape, ndim=ndim, dtype=dtype, sparse=sparse, name=name)\n\u001b[0m\u001b[1;32m 737\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mshape\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 738\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mndim\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/keras/backend.py\u001b[0m in \u001b[0;36mplaceholder\u001b[0;34m(shape, ndim, dtype, sparse, name)\u001b[0m\n\u001b[1;32m 996\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0marray_ops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msparse_placeholder\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mshape\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 997\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 998\u001b[0;31m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0marray_ops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplaceholder\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mshape\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 999\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1000\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/ops/array_ops.py\u001b[0m in \u001b[0;36mplaceholder\u001b[0;34m(dtype, shape, name)\u001b[0m\n\u001b[1;32m 2141\u001b[0m \"eager execution.\")\n\u001b[1;32m 2142\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2143\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mgen_array_ops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplaceholder\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mshape\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2144\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2145\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/ops/gen_array_ops.py\u001b[0m in \u001b[0;36mplaceholder\u001b[0;34m(dtype, shape, name)\u001b[0m\n\u001b[1;32m 6258\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mshape\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6259\u001b[0m \u001b[0mshape\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 6260\u001b[0;31m \u001b[0mshape\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_execute\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmake_shape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"shape\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6261\u001b[0m _, _, _op = _op_def_lib._apply_op_helper(\n\u001b[1;32m 6262\u001b[0m \"Placeholder\", dtype=dtype, shape=shape, name=name)\n", + "\u001b[0;32m/netpool/homes/wangyo/.conda/envs/tf-cuda9/lib/python3.7/site-packages/tensorflow/python/eager/execute.py\u001b[0m in \u001b[0;36mmake_shape\u001b[0;34m(v, arg_name)\u001b[0m\n\u001b[1;32m 146\u001b[0m \u001b[0mshape\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtensor_shape\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mas_shape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 147\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 148\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Error converting %s to a TensorShape: %s.\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0marg_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 149\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mValueError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 150\u001b[0m raise ValueError(\"Error converting %s to a TensorShape: %s.\" % (arg_name,\n", + "\u001b[0;31mTypeError\u001b[0m: Error converting shape to a TensorShape: only size-1 arrays can be converted to Python scalars." + ] + } + ], + "source": [ + "def test_xception_shape():\n", + " input_ = np.random.randint(0,256, (240,320,3))\n", + " print(input_)\n", + " inp = Input(input_)\n", + " xception = Xception_wrapper(include_top=False, weights='imagenet', input_tensor=inp, pooling=None)\n", + " print('xception:',xception.output.shape)\n", + "test_xception_shape()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "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.7.9" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/RecallNet/src/__pycache__/attentive_convlstm_new.cpython-36.pyc b/RecallNet/src/__pycache__/attentive_convlstm_new.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2de2a3f42f2d374fb2801692baa34cce7f787e20 GIT binary patch literal 19796 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
3-Fb*N?ccnCj zrc@YeWaY52@pl^nE3gimrx<|u+kUV9nC4J^YP1jYL%T2y$o;q+IznB(tbnji_{}nK zv*+6Rb{|3n`tj<(Ae`aDaCPG~0JyOy;HI8xPq$~SIO_B+Q)wb;a6IM0a(Fn0SJ%qJ#If=j*XOukhQ&vjW-b2IlO#FKPcwJ z>g>B0{u;gK+r!0O@g#1&iEdhE@r3U}lL)K-i-_faAZJ&YNIcd{gsw9AJ0^e6*)0lHkC1Z_;0z)OM!3*s)9EsYXZ1hrhfy7V<1yfpBMnTfQ7-|0A-+s|Jd~ zjP!TZ>6|cUNfsAEvUZMkBN*%;p%e8{XmS$vpvj{1F`B2k(X4i2&JmL;?}QwP`kCI; zS@dL#`mt`*gX0*D;Rm9-)SE7gJ{hB1>_#_g^SYcM_fokf>o9CRJ)zz%nyRx>oF z2Tc}Tei+SQuRah>2^{D?r&;t;jAqvnj%n!!qRSUPdbE{A*J5;!cN^i3{Z(G;IuK?0 zxO-4$(W^1a3*9J3Hp&B$eY!VU7JV*8cBvcL@Z1zLk{*Zw#&Gp$H;caTFb1MEb;urI zBykT0SoD<`1KpyFN;rwj%UK6%H9gloh_dL-7}0JqFmy%mUBl4QXxIlL&v@$|dR$A4Yt? z+4?}lpX*JWMQ_E3KWOsBEUE`0|9o%qENaEbKV1zQc0xLT?UO zv>W4~_vAY)aVnENWftPwSz@l$G zjDcwM56J*eQayTrMIXc%IMGw`9FjIqY&~eR=vQO3yDE@@Y4$)J&I4i(nk@SD7|pKp zE!u4kL!Bqn9@JU%TMwfi4flTPJW|pW!e0mf- zZ5lue5_c*wr#NgLN8IT=;!YRc6ExD?J;}IJzHM?T;hu6&Bl`4=M4z5U^r=8W^eMuk z=N~!Vvs-*8)u2ay!@8%vf^#}%px}AAxb(<;(QaV>A(L(#9x?(|cs)=Us+b%YI%@wh zlRshdr$~a>Q~S@D@qK1=4LJR6&hRgz_-7Sx%Ft9lB$Yv@S#785fg}n!4PPJ!BeGby z%Q$?Syq&-wo@n3p?HLj$i+{LD)tZjqroGk-ufJ|vn?Y>tzs8nr*Arl@F5;m72E+nm zr+_-|k24{(-|V?JL33XbjJR3=KckfzeM8YDivkb5VuNWm&CVv zdDw;FWq0p9@}%oF)ef{6*t`4fcKg-=CzIDN|1+?O;1f&PKjcGy#U$+X&TN`yF6ZDc zL&Q0^0pwNsfKj)d2;HI6L)n4!A-^Tzf-l#Ofr;XA`(NniY+niuF#j%~1 zBHsyDhpW>|x^*uD%>{qhkzoZyi~4^9BLClE(=O-#3q}UPmH5-7q`75(8kyxOd8lNV z>#+EjB)nUqbZkywn`UtN>zAril0TD@e=;dg`VUD(rxb2r_8>9N_=QrvB>%tEsQLdy zWe*YOFq07?eky7J{>TXfW%@yAr2sLMfXGV`{Sk&eN(_u<_N~n#K*Dj2;?ceQGk%oz ov+Og6)ido0|ivFeg<=k9;lhwZt3$13QOm=l}o! literal 0 HcmV?d00001 diff --git a/RecallNet/src/__pycache__/cb.cpython-36.pyc b/RecallNet/src/__pycache__/cb.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..843a15134f674442a2157f85e64961850426a819 GIT binary patch literal 3287 zcmaJ@-EJGl72erDE-6a36j_QB*HF90vgwDYna&zzrc&M#J1 z8~@(=%b&lkTh@QAbB_ytA4B~Wgj<|tR#?5+&<-6)?93f`p~otzANuFCoUAqq!eB91 z4;yA~C0w~-{k9j1Kc`ipIfaf zFJO<=X))bQG7-zDI4;M>CB83xT5ypa3`BA?F4DYANb&4(!0cnF>mb4k8Mi{4Gj2b& za2Veh#X^@m_=%bhzQ}u0h>1vSsMAAl8V49^3uMZsRs^?zVi!=GTUhIKB*X0emZR6w zGAfJcc(IjciS~Q4n25Y(YgdV^Cq1bC(~|JL^T$O}g#zsSctj&9On$#GLX$ zEau~HvVLY-`%I&g(BbHzm=SM`ya#3q(GW&{1luEg4Qa3=w`s`^I9ql~hm0RuTh^Q* zS`HoL(H11`(7R>*sWEf7J9Q%e!Ty(sGY;r=UeEz2@7^tijLWphcYelqq==J&;Cnk? zbZ*}}JPhx4?(7_P4*q!S@ZRnFt(v3*nA6G{IPHxk0;IhWMNIoyd@7{U^-{)Z9(Oa* za%Eujx^bBdw3`)ur9Go&oK=wqsWgi`GFp+y`8p(uJZ7;qwu#|mOs*_lc3!u|IxUa< zoW~;(MY<71Fy}ZUz8OUij^nJFkt^6wZW5tDog-v`B&U;xA|_ygXCw(emJh{bA4B~X z)*mql;9Sdym?{sWv0El8m?hcABh!Jl$n}9Z9xKbCh9dr&SXc_75y~-5mXdqNL3Uli|ZF{ z{^5cjSpItd{2vP_&ngR$XFs9eUwG@R+{{9#LL@=9ryU=17zWUwuitHi5EccCC-n>W4J@UO)BI#?ToV$c$oH&rO=*? z^S;ndCUWhLkSdT-+6F z1bnYL#1bnB{{nf1_M`huZWA$3M+GgZ#LO?h9{I?D6kSC*0pxRn22Pctwj{5G_wwW&3?XMy>0 zroo)4pMrOZLqbNNAMhO zM@N-XQoglTbi+8#++4cG<1$vF481IZinhBdtcyn|3Hp?j6Y?XF@G`kM>J=FmGNPZ7 zdl2iOmu7-KLqF+8$>8WhX6aS4F2UiuadLDMYpN^OSwqP**bTP9B*p6a`v=#)`OmN3 zy7~Mcf2ZePH=jd_C)i)YAk_+;frg?h^@;U_J+XU^X~hD-AT?l4XL+9yRuFE!K?~?C zPi+eIQwq4bW45iQ>}@nJb9>X8;m)D(KV@5%`p~pCkOM2JaYScEa5mY#C-`xa=KY;a zws$(>1n-?x?csWIM-%{OT%2gHmlcJSt5~rpN%$B2jzDAQa#@V^ipdNWnU9)j)-qZ7 z&NL=on&(3Pp6sq}D&Pv-HMy!vF^;%M;?wrWSpmPQPufP;EJo||2dt65BSNd?r$ngp z00z928YS~Xjh7qJwCO`EcG;61TI0%}(|S7keR+c=U}b6(M7=K<&U_ci?QUZN7txj5X@t14sPn AHUIzs literal 0 HcmV?d00001 diff --git a/RecallNet/src/__pycache__/cb.cpython-37.pyc b/RecallNet/src/__pycache__/cb.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7d9ad04ee6266ff8685285b6e9bfd4c7ce045c10 GIT binary patch literal 3281 zcmaJ@-EJGl72erDE-6a36j_QB*HDl)2m^#ljkIZnz&0YwhEs<%Tn7Ob4K~Z2A-U3W zm!4T#7DHaifL)-zEzn*`mwkl3L!V$S+Y7@e@&dW)cV;EpQSB}{GiT1s?4CL2J3n76 zE;cMY|6KdicR$oE>)$jveOwUN(bS*Oaf`Fe3agO~?a*OF+nGD`LeJ1F^F#lYeNI*z z24QfrRu3CyZ6RE^WpS5#k1g&AYqz<(c<6*n;Q71;UTw}h$KT>jzWA7h=lLpM<}09< zIs1dvy6^%LS)CTs%_I}CjEZqN8kd-#`>Nm~+a8EyZ&ajtnb5}5#{qF2O(=+5p9IL3t|e^E`6k zb#IGxS{`XRkB1_PbR&u&&Nw5w8AT7qaaOI!1-wtLQb%Tbr6U0(shoBwA_5k8hLd12 zf5;-&(bN~{&O$G>dW=KM1U^H1+z0I$y2b<0K0Kkp7eLi`9X43h=Wgeu{-jJFio01+ zCS((OXryKUKoS|Fv5t|t#f)0d-hiZk2Tc*YEjD@k%**FEd%Z7Q!l6E36;(Ym9s$n+ z$1z{GE01Wouymo6P;v!Fbj_G8m)cL0Vw{&PyONF;&xoj(U^#=1s4Mzu{xfV*gpkT5 z;1rk7%KXy+`uRT+5Y8$IfV21M`zPAE^u{k^U`_T&V{E`I@G^kYr!BgBql zHiP5s+DFdRIffe=r$r<(PV1H)#inQAm;P>z0wvM3zt3har`~(CRR(2!>K?K~2Dkla z=3{T849JlW+0>o-7p*f_xVfN$S$hC@T>I)Bacr z?a4Ur3+-eg*X{@?20la|2M`+v#XiDD6$HenNCpNoVS~h~><~68b3BYQrClymqFH(t zH)J()oT9@AkU+hSj!@IEoAwfGuqF#ITd^;*ragI`E$7EyMp^P_@-1V`Hi-X?vfN%n zG~Ki1M=$~Wduns{nSG*UuVXYT-@{RpECBtFi6-cSCN;`Wh;}NMptxoh&)m;MrQcxj zBtI-sxO?3t<`I&jULY^f`zVLWb?QujBR7`hSmw)bj(4O$vaTW=Al^Amzv(nrB=NOX zLFUH~k;?ENNx{?MsE}oxCn8dV7>rF5_0=Ylbh()rFUC=lfte{eC z&Mu^`JruHAD4~~C{7^*uBJB@K6%~1Qp#71MX~9ut*ae_Fic6%pT@)(}pGd;Yh-(({jN&%wnLT%QL&@)f!RHARW^iS>j%v3rgwzXAk5D!QD`Jd07RAYi;j z2k0(OZ5W+Bg~5+ZW?8qMvUjaxc5JU&Gh`Yv|5LVRsZUKo!w%tUQz{lwjZqMrtltxS zoTPbwBa`ioj@ZYzk*X~uC3i>$a7M+x_Ig=SNV$j;CoT#7qRJ5{=3Fj|kzO#!P?4F` zOo5ikN_VCl@zOjO@^>V6m7fq-psvY9RfMG_yhKhFy2Rb6eHz2-0qo;x@rzod>% z%de=TdIK@wCD&{+A8NdOAuXHg!(!(>*`YJ8{3V^ItKXMbh~vl`#Mz1EuXqHmT`-C4!qYLpZ)QES{iCi-38gzHrR literal 0 HcmV?d00001 diff --git a/RecallNet/src/__pycache__/data_loading.cpython-36.pyc b/RecallNet/src/__pycache__/data_loading.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7806f685ba1fbf6a1e8474c0d9f4dfe3fd1d954d GIT binary patch literal 19504 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 S9Q@fxJU^CxEInO#>Hh&^;O^l7 literal 0 HcmV?d00001 diff --git a/RecallNet/src/__pycache__/data_loading.cpython-37.pyc b/RecallNet/src/__pycache__/data_loading.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..19cfa07c56672883b34f66458ac69fe7881e09c5 GIT binary patch literal 19446 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 literal 0 HcmV?d00001 diff --git a/RecallNet/src/__pycache__/dcn_resnet_new.cpython-36.pyc b/RecallNet/src/__pycache__/dcn_resnet_new.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f3c80fcb65251c26b762b0a5ae880ecb78856d20 GIT binary patch literal 6271 zcmeHL-H+SG5$EzlqA2RVzkIe6CQfpebC!IccCKyUYf>~pkh4)6Eubb~DJ@T;O_7Hs z<+BY6DB!&G;oka3G!I4pk^Tkyny32%`qHP)>{1^mpWxOoiat~a&JAaFXNSA9znz_( zO2zv7%Afx5{l|*(lQQ`qjfT-JGzvnd zgRIyncFl&_Ej3C)W`N9USb{Hv<*wbZ1z!v+-I>O$;LUKZJKvZGzSLNt7A^mvG#2S9 zth*K*R;dy`bHaisb&q>dD-GfZ zB(q*KiNjv%yFvFPW@%O9#@EqFFXh%Dw0Y)XJFXp43Yx+farA8aOKyMbJ%1R-VGy<9 ztnr$Dv2}1v6)=ATo zdVBYUE3TF)Yc z1CBVGk0`CnekdFDE4)&&a;CJ^$?>x?gwKNa515L_9p4G4AEiP1!fA$a>!}kYP6|@_ zl6Jh*>3E3~#ZC+2#0k9@K65~rbRe)=y|iXI@Vnt0vUaZvh7$3PvH&B_P5mf|*@1j> zi9F_`)+ zIdH-tNx=sAkos+q$N_RSDt6vzD@naJ_?TPRbXq;e;A%xU|P z&tQ*4?R>%_uj`LyM$GMjv*B%QZZtP)wc5y@oc8~~-VNtBe%fQv$ohj`3KO4CwQy&+ zo^r8xrPc8wu~|YdNzW1g&LJ2SuE9p*MYqYksMX&DgH4CC3 z4G;=^#&!HW(COauAYrR$Nr#=><9Y%L=-33DDV|6)VJo1QjnwT{Rb_Mdj^qMgP zgH7g&fft~4atDZFTf`;>RVPbiNi7hS%mHT$Zkz|HIs+|P9r~QBKw9|G_?v-e2yeRs zcmr_jn-lO>67W{K1m3Jm;H?bsR-g+2am5_WN&r&`a5ey3DJu^F&K5EWaFW-uVh(T? z9RQrv$esg$yR4^47sZGOW^(|kok;0005(DuDM#k{LqXalioY$BrvF7$zX_ zEl~3)PJJ)~N8d4vyE*XhY>Lwct-m%Zv>cvEc&eU45;So77dN*zo$adVd>B#T-XON{ zXzhg*j@@VeM0*EL;!{5iML&i+pUol>5IT<>A`4qYvV>$A2x4zOS0n5NtX;zf2-fTh zl653kfmAhi4f!EXv+F2TM*>c^E@1Uk3}^45q4$wENG`+e8TJ9HK16Z@$wx>aM_1Su zl24FqAi0U8isTlOPmyc_;pSlK1Pn`3Lxm-PTR`sT@SfZQqAZU?t~rF<5tqZTDkUme zkkGpeeJ@AdTkjfm=KyhwfL`XAb^&owRsuvD;HCvBgubKuzkYh^k*4Qq#f3ani`dPC@ns3jsc-yEmBLW5A; zM_fp`d>PRgv1}X2eBo{}djB3V)csX{d&h3j%(1&sz*a2>ATUsBT7AV)R&TB_43Ezlxh9bR8`SU8j3 zqMy<-T$`ara#qN6AunVaR!X3qe242XV4~!8x=9y=4f$@;+q6a(hiyxlP6^nBEV8XZ z4Q83v>B?CFMzba~t90$mxI}&>mrG0Qbe&!WO9U+4xnOCexoBx5A6SwjkL1_#5z4}& zC8z*hhY{X`5w__2!dH7jvr4z8Xs*zmDVl3^cZ$ZLds8$Y(EVH^eY*;kst>`p8{pgB z3w=hKReEoV<_i5R*HkiGOSNyLGxVc$mVQh>p&MsFnZipULT_ztF z6CrNG#ZT%d(`CoV&nWMw3H=JLhg{p#yqfA#p0`|$AbSMJdR_wj>=+{XImprTnV3b^NGS;G(! z%}YVI?FxZ}caiKGV)eK^D1~ClYZB?LQ3c{}Fn;n|APUhTqqS8?8&q8tMF(w;V6KaQ zHWVK4nbX$E8d;N6{9h;eAIRWOvvk=*B_^>{)&R>tjxRQ0zkgly-Rq+7K~yD2)irLp zP`rj3mhZX@_JG2$AjNGl`!!K;Oyt50i#>7)#Kemg!NnMKkijh`pBusk!wRri)y9f6 z+Dn5lsfn_ZV8tr2$JnfnM6Bj$A@Li>rdT9t;(lTN97gMf{^xigChI_Km|aN7U@pa< Ot{di-wQF6suKo*9V7w{- literal 0 HcmV?d00001 diff --git a/RecallNet/src/__pycache__/dcn_resnet_new.cpython-37.pyc b/RecallNet/src/__pycache__/dcn_resnet_new.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..80ecee17409545242b71031459322edc4871392b GIT binary patch literal 6025 zcmeHL&2k&Z5#HG!{45syl}MVBtd(V(f=q!TDM~WqxJ=ur*p--4MM_eIB(+&!mcT}f zUDoVClvInVRLPedc*_GwxA>6Ci{uIBniC%&mz>f)vsi#IS&p5!%7*~8jh^nAp2ke? zH$DAvy>4sp`TNqJe*e37H0>YQ7<~+2K7uFx3lOSN5@~(XA_RFIc)g`d-iVC8*)sc9 z%j%a}B`GsOR&JI1l~$!+ZB?br0-4>iC0~kaeW&F}z8uy2Gp$+4SE9N8d}|)~YHNYo zwDzUeTBJ*~PG`O(tqXLS&eA#HF47e`PZxk&qHoX(^dfM}bn%haSUmx6wFVJ0hb)Y_ zcQA-MJWOJc%=+y#i3U9I!v0~xc*79Z=keiy3wsaxJoT}kF!m?~P3e;)e!BIkaK7-L zJxr1)jJwdPw*rd?77>)cPW!K?F>>?RTC8F$K2L4Zxc) z3SMMA&JWYwjg4-|dxLhflk_(ZI=v){0=_|m;P6%y_$-DgZuQYly1@dFq(QntlcP9F ze7f=Uc5@5FX&msK+ul(Sc6&Va_<={mzLzi>z@P78`$@oJFyX}sPY#>CosNa;10M&T zGCZHalbS@+GX1y4&>EJ8Wv;y-&+=w~0Bnf8(lYuwB#nJs0tV?C=$nMIwKBqbCK%BUd|2$wW2-6+}R%gJQwhN!@?jGw7`d}!PZIp!=aUKui zG-11{<*HWEMeUiFhA)C$mj(y^AmZ-!x^zJ4T-3SAK`{g^_d`mfV9KGsAI9#X&wE8z zh(R8(bk~i-l!FcMfd^fXs0ng4Dz?ATR?7V@_?TN*cRK^d;NQAZ4y)1*qIGwW2Gl)B znA;8FfWbQwck=~{{eCcB8M(H*?wY^0zSdrAHk)I6YT3Vqz3c8T0zP2z*!qJ3hlS6V zTDnv0r`jx0@AUjwzATZS@)N|r69@)P81SNrve#yQ-02Cu9XE6~2MS3oTb)K( zke`Y9un$Y^QJ?!BtYzQl!bmw|_zE)wafUB8D*ZY1B!8rJo`#xx4?yetu&h(DeG*|PV6a|^5WpA zdH7t+j9x5HPP_oU)7wBa$0iOb=_a{AF6bqqlR4lV$xZSg)n}k5+ki1&=_fk;uuUKx z{O|agfu}&WJ0oNRTpL!VkgY0_t$GHs*=HbI4Unxw%Ybep9J2wT5ZfHUwrW-@unjN` zWD469Z)D{h+w20{ltzslVcS_FD-zpmia0h8XgWD=gl(f)pl|NqfHX#c5fQ-{3%TMKj8f^01poUzyo->0NEcYra-xakO9D7}bMfZcrE z#;^-rSFi&@Fna^ZDw0b;8V0+Jd;!ty3QF~{K#>8@xLUJ9+ z+ejb{*Vq=4caf|ixq+mCgo{g?I|M%!>(+Z$e_1HLttSGYqxkmU1`CZN{WOXtNa?3jOngL9n zL`amKHxkj(rnC8clcP{J9%W>zC!+1hvk|7E411o9sfC{sQ|I@;MTpAiBr*oSIUYrw zhLOB}c#vTQDsnM0**1{>HXcRI=PVhd(zdYUHeO_4mdy!%Yl7cCD_GebbO*D8i8!4f z$Em00ID!r-hQ3DfaMdv(Sdz)Ws-(bUTLtHjpl1=Bb!ZevzxD$OPB@UA?=d*lF|IB& zc#NM8xw-EpcD;$&%DIxGb!o2$Vn0F6tB2KaQk?bNl1M{XM=;G;oGLND^!{`+8 z^sFeVkcA?SWGeXq^xN-1xX2F%Pz4@&GyVf4L6i(h24#;Y6}G}P$m8^5GSuT$PG0Gm z_L`(kkZRPBQn>97bS+nStdE=%?Ccx(IlucoWMV(uQhdcIeQhqHi@bDcZH^a@T+|36@7zk4rF{J*Bxs zFCSZH$gkvbW$8`&CcO%lEU@I9vNYD5wltQHEUB5tayOr$COuk)vd%S_;Vn7Cb?K`! zrMU!ipRKuauEsrA^Y*!#cM6U2?JB)W-v!^+z_%NxJQ!;(ovXQ0XzCg6r9QOy3~lgP zdXv6K*N@F%DYIV9Wu@1IXqg3B_pSYgvA-{K7_1|uJ^wHOrlcwaQ>OC6Zw zo45)eLZwXkK%|`$#9%cS@ga3Oo#6=5hT(-wkj}{;!NpL6cTNx*Y9{;vcrfWIdNITa zK>|SzLVQh6@ZJk%ehxp9ytwmS>SCg#YHh;xx9;8#+V^*M?%liJ-lhlJoqIdC@7~>h zf9KAYf7d^NTfEcpJ8|I9LfB)&Ag! zzlJ?)>gF#4M^wXp*OLN;q%vo;d NRoS%f*jMaJ{{~qYpfvyh literal 0 HcmV?d00001 diff --git a/RecallNet/src/__pycache__/eval.cpython-37.pyc b/RecallNet/src/__pycache__/eval.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..56625db955b1b884ba9e818953a51ad247ea8efb GIT binary patch literal 19470 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

i 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