From ca3ffbd506fd380de247347d90a3aff8e95b766d Mon Sep 17 00:00:00 2001 From: shaoniangu Date: Sun, 17 Mar 2019 20:12:28 +0800 Subject: [PATCH] Open source codes --- .idea/deployment.xml | 16 - .../inspectionProfiles/profiles_settings.xml | 7 - .idea/misc.xml | 19 - .idea/modules.xml | 8 - .idea/reid_baseline_for_opensource.iml | 11 - .idea/webServers.xml | 15 - .idea/workspace.xml | 957 ------------------ config/__pycache__/__init__.cpython-36.pyc | Bin 215 -> 0 bytes config/__pycache__/defaults.cpython-36.pyc | Bin 1721 -> 0 bytes data/__init__.py | 7 - data/__pycache__/__init__.cpython-36.pyc | Bin 219 -> 0 bytes data/__pycache__/build.cpython-36.pyc | Bin 1274 -> 0 bytes data/__pycache__/collate_batch.cpython-36.pyc | Bin 611 -> 0 bytes data/build.py | 45 - data/collate_batch.py | 18 - data/datasets/__init__.py | 27 - .../__pycache__/__init__.cpython-36.pyc | Bin 782 -> 0 bytes .../datasets/__pycache__/bases.cpython-36.pyc | Bin 3329 -> 0 bytes .../__pycache__/cuhk03.cpython-36.pyc | Bin 8022 -> 0 bytes .../__pycache__/dataset_loader.cpython-36.pyc | Bin 1502 -> 0 bytes .../__pycache__/dukemtmcreid.cpython-36.pyc | Bin 3756 -> 0 bytes .../__pycache__/eval_reid.cpython-36.pyc | Bin 1548 -> 0 bytes .../__pycache__/market1501.cpython-36.pyc | Bin 2899 -> 0 bytes .../__pycache__/msmt17.cpython-36.pyc | Bin 2715 -> 0 bytes data/datasets/bases.py | 95 -- data/datasets/cuhk03.py | 259 ----- data/datasets/dataset_loader.py | 45 - data/datasets/dukemtmcreid.py | 106 -- data/datasets/eval_reid.py | 63 -- data/datasets/market1501.py | 85 -- data/datasets/msmt17.py | 83 -- data/samplers/__init__.py | 7 - .../__pycache__/__init__.cpython-36.pyc | Bin 289 -> 0 bytes .../triplet_sampler.cpython-36.pyc | Bin 3517 -> 0 bytes data/samplers/triplet_sampler.py | 110 -- data/transforms/__init__.py | 7 - .../__pycache__/__init__.cpython-36.pyc | Bin 230 -> 0 bytes .../__pycache__/build.cpython-36.pyc | Bin 797 -> 0 bytes .../__pycache__/transforms.cpython-36.pyc | Bin 1939 -> 0 bytes data/transforms/build.py | 31 - data/transforms/transforms.py | 55 - engine/__pycache__/inference.cpython-36.pyc | Bin 2186 -> 0 bytes engine/__pycache__/trainer.cpython-36.pyc | Bin 8991 -> 0 bytes layers/__pycache__/__init__.cpython-36.pyc | Bin 4065 -> 0 bytes layers/__pycache__/center_loss.cpython-36.pyc | Bin 2210 -> 0 bytes .../__pycache__/cluster_loss.cpython-36.pyc | Bin 9050 -> 0 bytes layers/__pycache__/range_loss.cpython-36.pyc | Bin 7380 -> 0 bytes .../__pycache__/triplet_loss.cpython-36.pyc | Bin 5115 -> 0 bytes modeling/__pycache__/__init__.cpython-36.pyc | Bin 466 -> 0 bytes modeling/__pycache__/baseline.cpython-36.pyc | Bin 2422 -> 0 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 184 -> 0 bytes .../__pycache__/resnet.cpython-36.pyc | Bin 3257 -> 0 bytes solver/__pycache__/__init__.cpython-36.pyc | Bin 310 -> 0 bytes solver/__pycache__/build.cpython-36.pyc | Bin 1261 -> 0 bytes .../__pycache__/lr_scheduler.cpython-36.pyc | Bin 1600 -> 0 bytes utils/__pycache__/__init__.cpython-36.pyc | Bin 169 -> 0 bytes utils/__pycache__/iotools.cpython-36.pyc | Bin 1132 -> 0 bytes utils/__pycache__/logger.cpython-36.pyc | Bin 768 -> 0 bytes utils/__pycache__/re_ranking.cpython-36.pyc | Bin 2400 -> 0 bytes utils/__pycache__/reid_metric.cpython-36.pyc | Bin 3283 -> 0 bytes 60 files changed, 2076 deletions(-) delete mode 100644 .idea/deployment.xml delete mode 100644 .idea/inspectionProfiles/profiles_settings.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/reid_baseline_for_opensource.iml delete mode 100644 .idea/webServers.xml delete mode 100644 .idea/workspace.xml delete mode 100644 config/__pycache__/__init__.cpython-36.pyc delete mode 100644 config/__pycache__/defaults.cpython-36.pyc delete mode 100644 data/__init__.py delete mode 100644 data/__pycache__/__init__.cpython-36.pyc delete mode 100644 data/__pycache__/build.cpython-36.pyc delete mode 100644 data/__pycache__/collate_batch.cpython-36.pyc delete mode 100644 data/build.py delete mode 100644 data/collate_batch.py delete mode 100644 data/datasets/__init__.py delete mode 100644 data/datasets/__pycache__/__init__.cpython-36.pyc delete mode 100644 data/datasets/__pycache__/bases.cpython-36.pyc delete mode 100644 data/datasets/__pycache__/cuhk03.cpython-36.pyc delete mode 100644 data/datasets/__pycache__/dataset_loader.cpython-36.pyc delete mode 100644 data/datasets/__pycache__/dukemtmcreid.cpython-36.pyc delete mode 100644 data/datasets/__pycache__/eval_reid.cpython-36.pyc delete mode 100644 data/datasets/__pycache__/market1501.cpython-36.pyc delete mode 100644 data/datasets/__pycache__/msmt17.cpython-36.pyc delete mode 100644 data/datasets/bases.py delete mode 100644 data/datasets/cuhk03.py delete mode 100644 data/datasets/dataset_loader.py delete mode 100644 data/datasets/dukemtmcreid.py delete mode 100644 data/datasets/eval_reid.py delete mode 100644 data/datasets/market1501.py delete mode 100644 data/datasets/msmt17.py delete mode 100644 data/samplers/__init__.py delete mode 100644 data/samplers/__pycache__/__init__.cpython-36.pyc delete mode 100644 data/samplers/__pycache__/triplet_sampler.cpython-36.pyc delete mode 100644 data/samplers/triplet_sampler.py delete mode 100644 data/transforms/__init__.py delete mode 100644 data/transforms/__pycache__/__init__.cpython-36.pyc delete mode 100644 data/transforms/__pycache__/build.cpython-36.pyc delete mode 100644 data/transforms/__pycache__/transforms.cpython-36.pyc delete mode 100644 data/transforms/build.py delete mode 100644 data/transforms/transforms.py delete mode 100644 engine/__pycache__/inference.cpython-36.pyc delete mode 100644 engine/__pycache__/trainer.cpython-36.pyc delete mode 100644 layers/__pycache__/__init__.cpython-36.pyc delete mode 100644 layers/__pycache__/center_loss.cpython-36.pyc delete mode 100644 layers/__pycache__/cluster_loss.cpython-36.pyc delete mode 100644 layers/__pycache__/range_loss.cpython-36.pyc delete mode 100644 layers/__pycache__/triplet_loss.cpython-36.pyc delete mode 100644 modeling/__pycache__/__init__.cpython-36.pyc delete mode 100644 modeling/__pycache__/baseline.cpython-36.pyc delete mode 100644 modeling/backbones/__pycache__/__init__.cpython-36.pyc delete mode 100644 modeling/backbones/__pycache__/resnet.cpython-36.pyc delete mode 100644 solver/__pycache__/__init__.cpython-36.pyc delete mode 100644 solver/__pycache__/build.cpython-36.pyc delete mode 100644 solver/__pycache__/lr_scheduler.cpython-36.pyc delete mode 100644 utils/__pycache__/__init__.cpython-36.pyc delete mode 100644 utils/__pycache__/iotools.cpython-36.pyc delete mode 100644 utils/__pycache__/logger.cpython-36.pyc delete mode 100644 utils/__pycache__/re_ranking.cpython-36.pyc delete mode 100644 utils/__pycache__/reid_metric.cpython-36.pyc diff --git a/.idea/deployment.xml b/.idea/deployment.xml deleted file mode 100644 index 9c831a3..0000000 --- a/.idea/deployment.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index c23ecac..0000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 3839421..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 58a09c1..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/reid_baseline_for_opensource.iml b/.idea/reid_baseline_for_opensource.iml deleted file mode 100644 index b0a0eaa..0000000 --- a/.idea/reid_baseline_for_opensource.iml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/webServers.xml b/.idea/webServers.xml deleted file mode 100644 index 5673dbe..0000000 --- a/.idea/webServers.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index 00d9730..0000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,957 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cfg - - - - - - - - - true - DEFINITION_ORDER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - project - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1552715946759 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/config/__pycache__/__init__.cpython-36.pyc b/config/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 650eb1279f49d6141d3a87dbdec94244e380e60c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215 zcmXr!<>gYF&=XV0z`*brh~a<<$Z`PUVi6#b!Vtxf!kEI8!y` z<&aofl969zrJzupky@0KpPbF*ker`al9*g#1sBT6Ow2bhbV$!l%*@eC&d=p~$p|!4 zlkpZ)ytAJs%Psc!_>}zQ`1o5KDXD3Rr8y`uVg4<1G2%yFA+U`py6qm j>H6{UnR%Hd@$q^EmA5!-a`RJ4b5iYCfeMR3I$4+iHGMaK diff --git a/config/__pycache__/defaults.cpython-36.pyc b/config/__pycache__/defaults.cpython-36.pyc deleted file mode 100644 index 55356b3cbd271e668786d73582fd376bbc41c978..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1721 zcmZWoNpBoQ6z?unBUQfcDXZkgEQXl8=2 zxJ2RzXC%0A;1r2Jzy)zdN-iLTXbA<018RvwkhriMcvaIDMpUWld*4^@Rlj;wz0hcA ze|+`fTkjoKl%JJ-t$_AT9E0aMMF9nJTgrBh<#S4ue_vq*F-HYngnU$ZyU0sWkXVMI z#0r!os!*0#g^ENCREagHO00t>v61c9gc{Uiv1gMX*k_MHLu%t0PCye5z*sE4+T;ge z946pk#ty+DsUFVuJOYQ2AK^zcehiKvKgN&4QHdwun8cIW`Xn4jKFLqP35loSq{K5Y zDe)|vk~jsYCBBg1i!!%K{t}##`pcRBxorJBV8w9X3$iwod^*F6ng1m?E7vc>l*B7= zMdA$1NSuXp66fH&#Q7}0t8hW`g^a%f(~>V{=UIX}@+H0~Yrn*=$vau%ufj#CzXq2i zzAkir9WDpT^lU1g!gMaF7#p#(15r|3e+b1{qjhx8FT#W=A2q{rI#pFMa(d#1-PsNY0`8ysZDQ|7|qHaG0RMML`C8h4hFzP3T-Du!U=lkQR^(SzOJFZ=1bht;tHY+;RSY=J~7GE>NHaDmfQlE|4=wlk(a)W?}cReaSEV4|kz;<1XE18bh z37Hm{jB>djtB!0MgskZK?lPZz?Hg`BufV;kPIWSyjy3aeX_{+)jwEg11cnvC^Ls zuUJff9-5gQz1vxcHo6bDhJ%?0yNP;Zdj}qFMQ`Fip$vvN)yK+t^}oHKmejJEuVWW0 eP3)+QhERn4|DIDvy?|K2busqll3LssQT_+K6~biz diff --git a/data/__init__.py b/data/__init__.py deleted file mode 100644 index dafbc80..0000000 --- a/data/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# encoding: utf-8 -""" -@author: sherlock -@contact: sherlockliao01@gmail.com -""" - -from .build import make_data_loader diff --git a/data/__pycache__/__init__.cpython-36.pyc b/data/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 481d977f328e0d87fdc757f2f2f2ec0932c02f69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219 zcmXr!<>gYF&=XV2z`*brh~a<<$Z`PUVi6#b!Vtxf!kEI8!y` z<&aofl969zrJzupky@0KpPbF*ker`al9*g#1sBT6Ow2bhbV$!l%*@eC&d=p~$p|!4 zlkt{7Zen(7d`ey%Acw4EC}IUtVB(jM lo<2y6etdjpUS>&ryk0@&Ee@O9{FKt1R6CHeVvrUVCIDiIIU)c6 diff --git a/data/__pycache__/build.cpython-36.pyc b/data/__pycache__/build.cpython-36.pyc deleted file mode 100644 index 18d00f64855dc4f0642fbfbdcbd86a3308ed73d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1274 zcmZuw&5qkP5Ed!Pl4aTJO%wFG>7l55a8mS?APCmkIOw9g-oSEyKok%dQMTo!q%BFO zaUcT)Hpd3&YxI?PY)^TGo;sv=u|8A=$MX%p84hQL-*&svmw*28%VFR+|2TUe2K^Y8 z{22suh{F)W9F>@0_c+$}xgl|Jz;_IaxeNKl3(w7A9FWkjN~Lpl}*JTAMW3wp@f z9~{zSQQ{0b@1I1+bgh=PczSfi3tGP`s>Nm<9cOi=Xr`VX$z?8hon4yE$KM<;N?Pz? zR+rHyNX!`^9lfNAp4F7);uA6^tousPqDr%xbE@)mUg_Rj%J(pE;-V^4%D`9VO2?-q zUF0SbAlQ8{r4_5oQ3hkW0l7E9xPGbxE5pR*zU4}u&jk7{4ymgfenz!<=5%Vswc&=Kvc$$Rm6Po`(1S!gX2|~p~h7`*81pggX*h0yE?F*mSa8p*REv-hH2v- z0^{E2PJAH$l^eoW0fIHER612Q3aKvjHMuAx%Mw>XmTe-a3%= zT$S|Qz|+wis`RlXsRG1f`Tgk=Qj}WK(Q>B*E>V+QMXi%_u)2u H6ubWc`J`Pm diff --git a/data/__pycache__/collate_batch.cpython-36.pyc b/data/__pycache__/collate_batch.cpython-36.pyc deleted file mode 100644 index efcd466c282220594cedbfc64981c7cc43b8f304..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 611 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 diff --git a/data/datasets/__pycache__/dataset_loader.cpython-36.pyc b/data/datasets/__pycache__/dataset_loader.cpython-36.pyc deleted file mode 100644 index c7cc9445c3758a6fd90fb85f228567a676d63a6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1502 zcmZuxQEwbI5VqI5x0`JeQfQ$S6&N8kI)oMwFHj*AwSg#rLe*9ZtRk6Z?cD8UcYU>e zY3_RWLh{H1;$QHW{K^x5fhT76a-j-1nlEFI*E9a+^L@Ipk>3C9*Q4JF`c-58@W0d4SPx(+4r&EaVvC*Zn zHv4*Z^W}m|tt@Y~Kp=z(n*nYX#&iG+f*RUjY#&>nQ?f46A z%rxWQOswPO5TaQ>@l4yX?{$Y;A77s9d&k-|g);$g=|eqMt&gEor^+}VjZM|MKJ!V{ z48*u_!#o~nCt&6oz#qhH!e@WKmwhCmPaQzB?8*_fE~GNqcONUP>}r3Nr6?QcV4N zr=v>^&F*$H{#Y5STmD4t@AAvgL5VqV;D4mz5tzkF=AbMA8UTd6pago*4}6UGg{%5C zXNuM$hd@(kRefw;hp)^V2uRKnUIWi3LR4+#gm@Qb79SpgyU%XFT4c7`bESAx{#8XO zOdOem-p}c(7FMgaOWLRA7R0ZojfH?6Lc9+#izg8}yLByRx1sEU5buFuc^wI#fddJF zh`Z#7ErJDGgpSSwcu4T5Mu8+JYvx1r=25p6&DlJh2gl*EK(-_Vx$Ic!_qr;5RJBr_ z8B~L3<4XFdESgH14cvH*xf?Da^ z`dHfx--{0sO@wRg@&0$qXSU_EDTmnvemrc3N-`+BPWas^|CiJ!Uo0#C5)bPLfV^~_ IuCrw8AO4MMLI3~& diff --git a/data/datasets/__pycache__/dukemtmcreid.cpython-36.pyc b/data/datasets/__pycache__/dukemtmcreid.cpython-36.pyc deleted file mode 100644 index 89ac13e2d730625af39e531ac83a867efc5de4d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3756 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

CkL7K=oqT>V0z7mbRLZhHf3G< KSrs5et?)mlH3X&r diff --git a/data/datasets/__pycache__/eval_reid.cpython-36.pyc b/data/datasets/__pycache__/eval_reid.cpython-36.pyc deleted file mode 100644 index 945e1385f66ce6ff45d6bfbef8cb337e9be9d85f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1548 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 CUHK03 ({}) loaded".format(image_type)) - self.print_dataset_statistics(train, query, gallery) - - self.train = train - self.query = query - self.gallery = gallery - - self.num_train_pids, self.num_train_imgs, self.num_train_cams = self.get_imagedata_info(self.train) - self.num_query_pids, self.num_query_imgs, self.num_query_cams = self.get_imagedata_info(self.query) - self.num_gallery_pids, self.num_gallery_imgs, self.num_gallery_cams = self.get_imagedata_info(self.gallery) - - def _check_before_run(self): - """Check if all files are available before going deeper""" - if not osp.exists(self.dataset_dir): - raise RuntimeError("'{}' is not available".format(self.dataset_dir)) - if not osp.exists(self.data_dir): - raise RuntimeError("'{}' is not available".format(self.data_dir)) - if not osp.exists(self.raw_mat_path): - raise RuntimeError("'{}' is not available".format(self.raw_mat_path)) - if not osp.exists(self.split_new_det_mat_path): - raise RuntimeError("'{}' is not available".format(self.split_new_det_mat_path)) - if not osp.exists(self.split_new_lab_mat_path): - raise RuntimeError("'{}' is not available".format(self.split_new_lab_mat_path)) - - def _preprocess(self): - """ - This function is a bit complex and ugly, what it does is - 1. Extract data from cuhk-03.mat and save as png images. - 2. Create 20 classic splits. (Li et al. CVPR'14) - 3. Create new split. (Zhong et al. CVPR'17) - """ - print( - "Note: if root path is changed, the previously generated json files need to be re-generated (delete them first)") - if osp.exists(self.imgs_labeled_dir) and \ - osp.exists(self.imgs_detected_dir) and \ - osp.exists(self.split_classic_det_json_path) and \ - osp.exists(self.split_classic_lab_json_path) and \ - osp.exists(self.split_new_det_json_path) and \ - osp.exists(self.split_new_lab_json_path): - return - - mkdir_if_missing(self.imgs_detected_dir) - mkdir_if_missing(self.imgs_labeled_dir) - - print("Extract image data from {} and save as png".format(self.raw_mat_path)) - mat = h5py.File(self.raw_mat_path, 'r') - - def _deref(ref): - return mat[ref][:].T - - def _process_images(img_refs, campid, pid, save_dir): - img_paths = [] # Note: some persons only have images for one view - for imgid, img_ref in enumerate(img_refs): - img = _deref(img_ref) - # skip empty cell - if img.size == 0 or img.ndim < 3: continue - # images are saved with the following format, index-1 (ensure uniqueness) - # campid: index of camera pair (1-5) - # pid: index of person in 'campid'-th camera pair - # viewid: index of view, {1, 2} - # imgid: index of image, (1-10) - viewid = 1 if imgid < 5 else 2 - img_name = '{:01d}_{:03d}_{:01d}_{:02d}.png'.format(campid + 1, pid + 1, viewid, imgid + 1) - img_path = osp.join(save_dir, img_name) - if not osp.isfile(img_path): - imsave(img_path, img) - img_paths.append(img_path) - return img_paths - - def _extract_img(name): - print("Processing {} images (extract and save) ...".format(name)) - meta_data = [] - imgs_dir = self.imgs_detected_dir if name == 'detected' else self.imgs_labeled_dir - for campid, camp_ref in enumerate(mat[name][0]): - camp = _deref(camp_ref) - num_pids = camp.shape[0] - for pid in range(num_pids): - img_paths = _process_images(camp[pid, :], campid, pid, imgs_dir) - assert len(img_paths) > 0, "campid{}-pid{} has no images".format(campid, pid) - meta_data.append((campid + 1, pid + 1, img_paths)) - print("- done camera pair {} with {} identities".format(campid + 1, num_pids)) - return meta_data - - meta_detected = _extract_img('detected') - meta_labeled = _extract_img('labeled') - - def _extract_classic_split(meta_data, test_split): - train, test = [], [] - num_train_pids, num_test_pids = 0, 0 - num_train_imgs, num_test_imgs = 0, 0 - for i, (campid, pid, img_paths) in enumerate(meta_data): - - if [campid, pid] in test_split: - for img_path in img_paths: - camid = int(osp.basename(img_path).split('_')[2]) - 1 # make it 0-based - test.append((img_path, num_test_pids, camid)) - num_test_pids += 1 - num_test_imgs += len(img_paths) - else: - for img_path in img_paths: - camid = int(osp.basename(img_path).split('_')[2]) - 1 # make it 0-based - train.append((img_path, num_train_pids, camid)) - num_train_pids += 1 - num_train_imgs += len(img_paths) - return train, num_train_pids, num_train_imgs, test, num_test_pids, num_test_imgs - - print("Creating classic splits (# = 20) ...") - splits_classic_det, splits_classic_lab = [], [] - for split_ref in mat['testsets'][0]: - test_split = _deref(split_ref).tolist() - - # create split for detected images - train, num_train_pids, num_train_imgs, test, num_test_pids, num_test_imgs = \ - _extract_classic_split(meta_detected, test_split) - splits_classic_det.append({ - 'train': train, 'query': test, 'gallery': test, - 'num_train_pids': num_train_pids, 'num_train_imgs': num_train_imgs, - 'num_query_pids': num_test_pids, 'num_query_imgs': num_test_imgs, - 'num_gallery_pids': num_test_pids, 'num_gallery_imgs': num_test_imgs, - }) - - # create split for labeled images - train, num_train_pids, num_train_imgs, test, num_test_pids, num_test_imgs = \ - _extract_classic_split(meta_labeled, test_split) - splits_classic_lab.append({ - 'train': train, 'query': test, 'gallery': test, - 'num_train_pids': num_train_pids, 'num_train_imgs': num_train_imgs, - 'num_query_pids': num_test_pids, 'num_query_imgs': num_test_imgs, - 'num_gallery_pids': num_test_pids, 'num_gallery_imgs': num_test_imgs, - }) - - write_json(splits_classic_det, self.split_classic_det_json_path) - write_json(splits_classic_lab, self.split_classic_lab_json_path) - - def _extract_set(filelist, pids, pid2label, idxs, img_dir, relabel): - tmp_set = [] - unique_pids = set() - for idx in idxs: - img_name = filelist[idx][0] - camid = int(img_name.split('_')[2]) - 1 # make it 0-based - pid = pids[idx] - if relabel: pid = pid2label[pid] - img_path = osp.join(img_dir, img_name) - tmp_set.append((img_path, int(pid), camid)) - unique_pids.add(pid) - return tmp_set, len(unique_pids), len(idxs) - - def _extract_new_split(split_dict, img_dir): - train_idxs = split_dict['train_idx'].flatten() - 1 # index-0 - pids = split_dict['labels'].flatten() - train_pids = set(pids[train_idxs]) - pid2label = {pid: label for label, pid in enumerate(train_pids)} - query_idxs = split_dict['query_idx'].flatten() - 1 - gallery_idxs = split_dict['gallery_idx'].flatten() - 1 - filelist = split_dict['filelist'].flatten() - train_info = _extract_set(filelist, pids, pid2label, train_idxs, img_dir, relabel=True) - query_info = _extract_set(filelist, pids, pid2label, query_idxs, img_dir, relabel=False) - gallery_info = _extract_set(filelist, pids, pid2label, gallery_idxs, img_dir, relabel=False) - return train_info, query_info, gallery_info - - print("Creating new splits for detected images (767/700) ...") - train_info, query_info, gallery_info = _extract_new_split( - loadmat(self.split_new_det_mat_path), - self.imgs_detected_dir, - ) - splits = [{ - 'train': train_info[0], 'query': query_info[0], 'gallery': gallery_info[0], - 'num_train_pids': train_info[1], 'num_train_imgs': train_info[2], - 'num_query_pids': query_info[1], 'num_query_imgs': query_info[2], - 'num_gallery_pids': gallery_info[1], 'num_gallery_imgs': gallery_info[2], - }] - write_json(splits, self.split_new_det_json_path) - - print("Creating new splits for labeled images (767/700) ...") - train_info, query_info, gallery_info = _extract_new_split( - loadmat(self.split_new_lab_mat_path), - self.imgs_labeled_dir, - ) - splits = [{ - 'train': train_info[0], 'query': query_info[0], 'gallery': gallery_info[0], - 'num_train_pids': train_info[1], 'num_train_imgs': train_info[2], - 'num_query_pids': query_info[1], 'num_query_imgs': query_info[2], - 'num_gallery_pids': gallery_info[1], 'num_gallery_imgs': gallery_info[2], - }] - write_json(splits, self.split_new_lab_json_path) diff --git a/data/datasets/dataset_loader.py b/data/datasets/dataset_loader.py deleted file mode 100644 index b75ead8..0000000 --- a/data/datasets/dataset_loader.py +++ /dev/null @@ -1,45 +0,0 @@ -# encoding: utf-8 -""" -@author: liaoxingyu -@contact: sherlockliao01@gmail.com -""" - -import os.path as osp -from PIL import Image -from torch.utils.data import Dataset - - -def read_image(img_path): - """Keep reading image until succeed. - This can avoid IOError incurred by heavy IO process.""" - got_img = False - if not osp.exists(img_path): - raise IOError("{} does not exist".format(img_path)) - while not got_img: - try: - img = Image.open(img_path).convert('RGB') - got_img = True - except IOError: - print("IOError incurred when reading '{}'. Will redo. Don't worry. Just chill.".format(img_path)) - pass - return img - - -class ImageDataset(Dataset): - """Image Person ReID Dataset""" - - def __init__(self, dataset, transform=None): - self.dataset = dataset - self.transform = transform - - def __len__(self): - return len(self.dataset) - - def __getitem__(self, index): - img_path, pid, camid = self.dataset[index] - img = read_image(img_path) - - if self.transform is not None: - img = self.transform(img) - - return img, pid, camid, img_path diff --git a/data/datasets/dukemtmcreid.py b/data/datasets/dukemtmcreid.py deleted file mode 100644 index 2481d79..0000000 --- a/data/datasets/dukemtmcreid.py +++ /dev/null @@ -1,106 +0,0 @@ -# encoding: utf-8 -""" -@author: liaoxingyu -@contact: liaoxingyu2@jd.com -""" - -import glob -import re -import urllib -import zipfile - -import os.path as osp - -from utils.iotools import mkdir_if_missing -from .bases import BaseImageDataset - - -class DukeMTMCreID(BaseImageDataset): - """ - DukeMTMC-reID - Reference: - 1. Ristani et al. Performance Measures and a Data Set for Multi-Target, Multi-Camera Tracking. ECCVW 2016. - 2. Zheng et al. Unlabeled Samples Generated by GAN Improve the Person Re-identification Baseline in vitro. ICCV 2017. - URL: https://github.com/layumi/DukeMTMC-reID_evaluation - - Dataset statistics: - # identities: 1404 (train + query) - # images:16522 (train) + 2228 (query) + 17661 (gallery) - # cameras: 8 - """ - dataset_dir = 'dukemtmc-reid' - - def __init__(self, root='/home/haoluo/data', verbose=True, **kwargs): - super(DukeMTMCreID, self).__init__() - self.dataset_dir = osp.join(root, self.dataset_dir) - self.dataset_url = 'http://vision.cs.duke.edu/DukeMTMC/data/misc/DukeMTMC-reID.zip' - self.train_dir = osp.join(self.dataset_dir, 'DukeMTMC-reID/bounding_box_train') - self.query_dir = osp.join(self.dataset_dir, 'DukeMTMC-reID/query') - self.gallery_dir = osp.join(self.dataset_dir, 'DukeMTMC-reID/bounding_box_test') - - self._download_data() - self._check_before_run() - - train = self._process_dir(self.train_dir, relabel=True) - query = self._process_dir(self.query_dir, relabel=False) - gallery = self._process_dir(self.gallery_dir, relabel=False) - - if verbose: - print("=> DukeMTMC-reID loaded") - self.print_dataset_statistics(train, query, gallery) - - self.train = train - self.query = query - self.gallery = gallery - - self.num_train_pids, self.num_train_imgs, self.num_train_cams = self.get_imagedata_info(self.train) - self.num_query_pids, self.num_query_imgs, self.num_query_cams = self.get_imagedata_info(self.query) - self.num_gallery_pids, self.num_gallery_imgs, self.num_gallery_cams = self.get_imagedata_info(self.gallery) - - def _download_data(self): - if osp.exists(self.dataset_dir): - print("This dataset has been downloaded.") - return - - print("Creating directory {}".format(self.dataset_dir)) - mkdir_if_missing(self.dataset_dir) - fpath = osp.join(self.dataset_dir, osp.basename(self.dataset_url)) - - print("Downloading DukeMTMC-reID dataset") - urllib.urlretrieve(self.dataset_url, fpath) - - print("Extracting files") - zip_ref = zipfile.ZipFile(fpath, 'r') - zip_ref.extractall(self.dataset_dir) - zip_ref.close() - - def _check_before_run(self): - """Check if all files are available before going deeper""" - if not osp.exists(self.dataset_dir): - raise RuntimeError("'{}' is not available".format(self.dataset_dir)) - if not osp.exists(self.train_dir): - raise RuntimeError("'{}' is not available".format(self.train_dir)) - if not osp.exists(self.query_dir): - raise RuntimeError("'{}' is not available".format(self.query_dir)) - if not osp.exists(self.gallery_dir): - raise RuntimeError("'{}' is not available".format(self.gallery_dir)) - - def _process_dir(self, dir_path, relabel=False): - img_paths = glob.glob(osp.join(dir_path, '*.jpg')) - pattern = re.compile(r'([-\d]+)_c(\d)') - - pid_container = set() - for img_path in img_paths: - pid, _ = map(int, pattern.search(img_path).groups()) - pid_container.add(pid) - pid2label = {pid: label for label, pid in enumerate(pid_container)} - - dataset = [] - for img_path in img_paths: - pid, camid = map(int, pattern.search(img_path).groups()) - assert 1 <= camid <= 8 - camid -= 1 # index starts from 0 - if relabel: pid = pid2label[pid] - dataset.append((img_path, pid, camid)) - - return dataset diff --git a/data/datasets/eval_reid.py b/data/datasets/eval_reid.py deleted file mode 100644 index 38f9783..0000000 --- a/data/datasets/eval_reid.py +++ /dev/null @@ -1,63 +0,0 @@ -# encoding: utf-8 -""" -@author: liaoxingyu -@contact: sherlockliao01@gmail.com -""" - -import numpy as np - - -def eval_func(distmat, q_pids, g_pids, q_camids, g_camids, max_rank=50): - """Evaluation with market1501 metric - Key: for each query identity, its gallery images from the same camera view are discarded. - """ - num_q, num_g = distmat.shape - if num_g < max_rank: - max_rank = num_g - print("Note: number of gallery samples is quite small, got {}".format(num_g)) - indices = np.argsort(distmat, axis=1) - matches = (g_pids[indices] == q_pids[:, np.newaxis]).astype(np.int32) - - # compute cmc curve for each query - all_cmc = [] - all_AP = [] - num_valid_q = 0. # number of valid query - for q_idx in range(num_q): - # get query pid and camid - q_pid = q_pids[q_idx] - q_camid = q_camids[q_idx] - - # remove gallery samples that have the same pid and camid with query - order = indices[q_idx] - remove = (g_pids[order] == q_pid) & (g_camids[order] == q_camid) - keep = np.invert(remove) - - # compute cmc curve - # binary vector, positions with value 1 are correct matches - orig_cmc = matches[q_idx][keep] - if not np.any(orig_cmc): - # this condition is true when query identity does not appear in gallery - continue - - cmc = orig_cmc.cumsum() - cmc[cmc > 1] = 1 - - all_cmc.append(cmc[:max_rank]) - num_valid_q += 1. - - # compute average precision - # reference: https://en.wikipedia.org/wiki/Evaluation_measures_(information_retrieval)#Average_precision - num_rel = orig_cmc.sum() - tmp_cmc = orig_cmc.cumsum() - tmp_cmc = [x / (i + 1.) for i, x in enumerate(tmp_cmc)] - tmp_cmc = np.asarray(tmp_cmc) * orig_cmc - AP = tmp_cmc.sum() / num_rel - all_AP.append(AP) - - assert num_valid_q > 0, "Error: all query identities do not appear in gallery" - - all_cmc = np.asarray(all_cmc).astype(np.float32) - all_cmc = all_cmc.sum(0) / num_valid_q - mAP = np.mean(all_AP) - - return all_cmc, mAP diff --git a/data/datasets/market1501.py b/data/datasets/market1501.py deleted file mode 100644 index 9b3a71a..0000000 --- a/data/datasets/market1501.py +++ /dev/null @@ -1,85 +0,0 @@ -# encoding: utf-8 -""" -@author: sherlock -@contact: sherlockliao01@gmail.com -""" - -import glob -import re - -import os.path as osp - -from .bases import BaseImageDataset - - -class Market1501(BaseImageDataset): - """ - Market1501 - Reference: - Zheng et al. Scalable Person Re-identification: A Benchmark. ICCV 2015. - URL: http://www.liangzheng.org/Project/project_reid.html - - Dataset statistics: - # identities: 1501 (+1 for background) - # images: 12936 (train) + 3368 (query) + 15913 (gallery) - """ - dataset_dir = 'market1501' - - def __init__(self, root='/home/haoluo/data', verbose=True, **kwargs): - super(Market1501, self).__init__() - self.dataset_dir = osp.join(root, self.dataset_dir) - self.train_dir = osp.join(self.dataset_dir, 'bounding_box_train') - self.query_dir = osp.join(self.dataset_dir, 'query') - self.gallery_dir = osp.join(self.dataset_dir, 'bounding_box_test') - - self._check_before_run() - - train = self._process_dir(self.train_dir, relabel=True) - query = self._process_dir(self.query_dir, relabel=False) - gallery = self._process_dir(self.gallery_dir, relabel=False) - - if verbose: - print("=> Market1501 loaded") - self.print_dataset_statistics(train, query, gallery) - - self.train = train - self.query = query - self.gallery = gallery - - self.num_train_pids, self.num_train_imgs, self.num_train_cams = self.get_imagedata_info(self.train) - self.num_query_pids, self.num_query_imgs, self.num_query_cams = self.get_imagedata_info(self.query) - self.num_gallery_pids, self.num_gallery_imgs, self.num_gallery_cams = self.get_imagedata_info(self.gallery) - - def _check_before_run(self): - """Check if all files are available before going deeper""" - if not osp.exists(self.dataset_dir): - raise RuntimeError("'{}' is not available".format(self.dataset_dir)) - if not osp.exists(self.train_dir): - raise RuntimeError("'{}' is not available".format(self.train_dir)) - if not osp.exists(self.query_dir): - raise RuntimeError("'{}' is not available".format(self.query_dir)) - if not osp.exists(self.gallery_dir): - raise RuntimeError("'{}' is not available".format(self.gallery_dir)) - - def _process_dir(self, dir_path, relabel=False): - img_paths = glob.glob(osp.join(dir_path, '*.jpg')) - pattern = re.compile(r'([-\d]+)_c(\d)') - - pid_container = set() - for img_path in img_paths: - pid, _ = map(int, pattern.search(img_path).groups()) - if pid == -1: continue # junk images are just ignored - pid_container.add(pid) - pid2label = {pid: label for label, pid in enumerate(pid_container)} - - dataset = [] - for img_path in img_paths: - pid, camid = map(int, pattern.search(img_path).groups()) - if pid == -1: continue # junk images are just ignored - assert 0 <= pid <= 1501 # pid == 0 means background - assert 1 <= camid <= 6 - camid -= 1 # index starts from 0 - if relabel: pid = pid2label[pid] - dataset.append((img_path, pid, camid)) - - return dataset diff --git a/data/datasets/msmt17.py b/data/datasets/msmt17.py deleted file mode 100644 index b2dc2a9..0000000 --- a/data/datasets/msmt17.py +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Time : 2019/1/17 15:00 -# @Author : Hao Luo -# @File : msmt17.py - -import glob -import re - -import os.path as osp - -from .bases import BaseImageDataset - - -class MSMT17(BaseImageDataset): - """ - MSMT17 - - Reference: - Wei et al. Person Transfer GAN to Bridge Domain Gap for Person Re-Identification. CVPR 2018. - - URL: http://www.pkuvmc.com/publications/msmt17.html - - Dataset statistics: - # identities: 4101 - # images: 32621 (train) + 11659 (query) + 82161 (gallery) - # cameras: 15 - """ - dataset_dir = 'msmt17' - - def __init__(self,root='/home/haoluo/data', verbose=True, **kwargs): - super(MSMT17, self).__init__() - self.dataset_dir = osp.join(root, self.dataset_dir) - self.train_dir = osp.join(self.dataset_dir, 'MSMT17_V2/mask_train_v2') - self.test_dir = osp.join(self.dataset_dir, 'MSMT17_V2/mask_test_v2') - self.list_train_path = osp.join(self.dataset_dir, 'MSMT17_V2/list_train.txt') - self.list_val_path = osp.join(self.dataset_dir, 'MSMT17_V2/list_val.txt') - self.list_query_path = osp.join(self.dataset_dir, 'MSMT17_V2/list_query.txt') - self.list_gallery_path = osp.join(self.dataset_dir, 'MSMT17_V2/list_gallery.txt') - - self._check_before_run() - train = self._process_dir(self.train_dir, self.list_train_path) - #val, num_val_pids, num_val_imgs = self._process_dir(self.train_dir, self.list_val_path) - query = self._process_dir(self.test_dir, self.list_query_path) - gallery = self._process_dir(self.test_dir, self.list_gallery_path) - if verbose: - print("=> MSMT17 loaded") - self.print_dataset_statistics(train, query, gallery) - - self.train = train - self.query = query - self.gallery = gallery - - self.num_train_pids, self.num_train_imgs, self.num_train_cams = self.get_imagedata_info(self.train) - self.num_query_pids, self.num_query_imgs, self.num_query_cams = self.get_imagedata_info(self.query) - self.num_gallery_pids, self.num_gallery_imgs, self.num_gallery_cams = self.get_imagedata_info(self.gallery) - - def _check_before_run(self): - """Check if all files are available before going deeper""" - if not osp.exists(self.dataset_dir): - raise RuntimeError("'{}' is not available".format(self.dataset_dir)) - if not osp.exists(self.train_dir): - raise RuntimeError("'{}' is not available".format(self.train_dir)) - if not osp.exists(self.test_dir): - raise RuntimeError("'{}' is not available".format(self.test_dir)) - - def _process_dir(self, dir_path, list_path): - with open(list_path, 'r') as txt: - lines = txt.readlines() - dataset = [] - pid_container = set() - for img_idx, img_info in enumerate(lines): - img_path, pid = img_info.split(' ') - pid = int(pid) # no need to relabel - camid = int(img_path.split('_')[2]) - img_path = osp.join(dir_path, img_path) - dataset.append((img_path, pid, camid)) - pid_container.add(pid) - - # check if pid starts from 0 and increments with 1 - for idx, pid in enumerate(pid_container): - assert idx == pid, "See code comment for explanation" - return dataset \ No newline at end of file diff --git a/data/samplers/__init__.py b/data/samplers/__init__.py deleted file mode 100644 index 0535a09..0000000 --- a/data/samplers/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# encoding: utf-8 -""" -@author: liaoxingyu -@contact: sherlockliao01@gmail.com -""" - -from .triplet_sampler import RandomIdentitySampler, RandomIdentitySampler_alignedreid # new add by gu diff --git a/data/samplers/__pycache__/__init__.cpython-36.pyc b/data/samplers/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index dbe29cbff70e4b381c85f3664d0eeebac0217bd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289 zcmZusyGq1B6rD^WN?_S)L9mI9kS0;K+C?O-jfL9<;WEq}vV-$jW+q_#1`B_~Z}3mj zTKNlB&Y)O%;T#V4o^#-?7mM=Z_2uE65b_c6H#Dj)!kb%c0g87cr z#q*}@*ckTKZL3O2W}l=Prm^g}HG%Q4t^8g%W%*+|US4&BW>PiW>hd#-%{84@_spQx zwDjSK+IVVX~_wZ&11n`HH=prGI9$y0a$ diff --git a/data/samplers/__pycache__/triplet_sampler.cpython-36.pyc b/data/samplers/__pycache__/triplet_sampler.cpython-36.pyc deleted file mode 100644 index 40473ad4942b85316a72f8fde0b234258baa4887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3517 zcmc&$L66)-7Ot}0w%gq^873hl0kQ@mln#?_1X7S96wN9K7J=rlAVsu-jK@_oZI9dT zDOX25Bll?#2gFMJfIV^JKkS(w;VY;83wz>w<(|w;5+H|_=vI}hUe$Y5_1;(CtM}K| zg13MC;nDZ&jQz^a{T#HnQL1lH2{vYe3oGYiZobyoGGBXa<7?;6v@`DTc8)vtAainm z+8uW}`-F*(aKB~3mE9A29H8$BAAR5Sd&2sH4Z6qg2ix&nPfB$!4D&QD7iqD7G!M3u zve0p&@0}CAx1EV$Qci>aVry(?z?+_sd+|KiB26^9-WTz7mP?h;`039=V;iNqg-S9U zgwY{z087~4vaur^(ZLs+6&}8>@M&Ys%m0iEQBFS?CtKkx6CUp^=DuSCM zGfxp-8;7FUbkjn}MFey=U5Tku#acFQJe$cvG|quMsv3vX8#kB5zMeETzQC?i$$U?B zU`dgCl}9!^##+Op#)eMgq+(GuHq8Fa)GL_qzc+^?+V`jhw5mp0rMONyS_y`;qsET_ zn^Z^94QNz1Q8DhC|2hx&4St1h*e>s*?W4H-_~vu3(eTtvLLQ^v1t|0()l74QfiJ!z z_ajL4($aS3px3Fb>j>o1)^2T6Kr;_v`dIr}Hwy?h88MOdFB>zu2pQ&Zw$GN%;%;rj z(hwkVvVILHaRwWJiLqg+F#rhL7&Fizox|}%cDMluwQE~g*M;0$>_XEunrjE0AGxxy z)_P4qS~~$;7WZo(Yu#O1E1Q=D_OWzoFWYFXL*J}+0wz7M)GxK0y;Q?KAo~l}{0VDr z5)=U~XXnd-g|LDQ8c)et9w)K|+hqe7MebAJazH03DNaJl8MRbEBO6p16j;Tqaa#sz z++FZqUa8K)fOto zeXGwm_&VSga0ewod!6?ob*xRas2^a)ru7E^G)A8Qkbp?Va1q@a1d?twN1{=e(8q@k z{Pgy`D8i+SqE9ha(dA|Q`1Ridy_vZ)@aRxQJe5(@1W`0C#XP5WKZ*|LalRUXWl<(k zq^{Gll)lt}D!Q!aDsqw{Mx`KE6g}T}EdR3qnvworlHnWAJx~3$)FlBtNlf%E>d z#Ap_NPzt2V>8wE8Zw3RktlG=q7@S>@=RZnb0 zmwtp#3b_I6E*j?(rv^`&H0LaCBk_Sn!9$cHZKOyCNs>6!sXO2~!=K=rkob+HnYT)j zzV4#$8#{qXZ@37(Hm4AgoTDAXFg=nP{#c_HQITPtX5F0k$TgtqRJ}#j+o%Sfacbis#e>k1 z)|J!^PmM<#uFXnMQw9+VL8qbsFy!o(NCSQq-d%rD?>j39Sw-loBH51XHp^_o-!Ep72Qgne0EgR$KLSkUw=DQEu Xd~lzxNJXR$Hpg?yM}9-GH}3xi9H?Zo diff --git a/data/samplers/triplet_sampler.py b/data/samplers/triplet_sampler.py deleted file mode 100644 index 2ca2145..0000000 --- a/data/samplers/triplet_sampler.py +++ /dev/null @@ -1,110 +0,0 @@ -# encoding: utf-8 -""" -@author: liaoxingyu -@contact: liaoxingyu2@jd.com -""" - -import copy -import random -import torch -from collections import defaultdict - -import numpy as np -from torch.utils.data.sampler import Sampler - - -class RandomIdentitySampler(Sampler): - """ - Randomly sample N identities, then for each identity, - randomly sample K instances, therefore batch size is N*K. - Args: - - data_source (list): list of (img_path, pid, camid). - - num_instances (int): number of instances per identity in a batch. - - batch_size (int): number of examples in a batch. - """ - - def __init__(self, data_source, batch_size, num_instances): - self.data_source = data_source - self.batch_size = batch_size - self.num_instances = num_instances - self.num_pids_per_batch = self.batch_size // self.num_instances - self.index_dic = defaultdict(list) - for index, (_, pid, _) in enumerate(self.data_source): - self.index_dic[pid].append(index) - self.pids = list(self.index_dic.keys()) - - # estimate number of examples in an epoch - self.length = 0 - for pid in self.pids: - idxs = self.index_dic[pid] - num = len(idxs) - if num < self.num_instances: - num = self.num_instances - self.length += num - num % self.num_instances - - def __iter__(self): - batch_idxs_dict = defaultdict(list) - - for pid in self.pids: - idxs = copy.deepcopy(self.index_dic[pid]) - if len(idxs) < self.num_instances: - idxs = np.random.choice(idxs, size=self.num_instances, replace=True) - random.shuffle(idxs) - batch_idxs = [] - for idx in idxs: - batch_idxs.append(idx) - if len(batch_idxs) == self.num_instances: - batch_idxs_dict[pid].append(batch_idxs) - batch_idxs = [] - - avai_pids = copy.deepcopy(self.pids) - final_idxs = [] - - while len(avai_pids) >= self.num_pids_per_batch: - selected_pids = random.sample(avai_pids, self.num_pids_per_batch) - for pid in selected_pids: - batch_idxs = batch_idxs_dict[pid].pop(0) - final_idxs.extend(batch_idxs) - if len(batch_idxs_dict[pid]) == 0: - avai_pids.remove(pid) - - return iter(final_idxs) - - def __len__(self): - return self.length - - -# New add by gu -class RandomIdentitySampler_alignedreid(Sampler): - """ - Randomly sample N identities, then for each identity, - randomly sample K instances, therefore batch size is N*K. - - Code imported from https://github.com/Cysu/open-reid/blob/master/reid/utils/data/sampler.py. - - Args: - data_source (Dataset): dataset to sample from. - num_instances (int): number of instances per identity. - """ - def __init__(self, data_source, num_instances): - self.data_source = data_source - self.num_instances = num_instances - self.index_dic = defaultdict(list) - for index, (_, pid, _) in enumerate(data_source): - self.index_dic[pid].append(index) - self.pids = list(self.index_dic.keys()) - self.num_identities = len(self.pids) - - def __iter__(self): - indices = torch.randperm(self.num_identities) - ret = [] - for i in indices: - pid = self.pids[i] - t = self.index_dic[pid] - replace = False if len(t) >= self.num_instances else True - t = np.random.choice(t, size=self.num_instances, replace=replace) - ret.extend(t) - return iter(ret) - - def __len__(self): - return self.num_identities * self.num_instances diff --git a/data/transforms/__init__.py b/data/transforms/__init__.py deleted file mode 100644 index 51357aa..0000000 --- a/data/transforms/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# encoding: utf-8 -""" -@author: sherlock -@contact: sherlockliao01@gmail.com -""" - -from .build import build_transforms diff --git a/data/transforms/__pycache__/__init__.cpython-36.pyc b/data/transforms/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 8badfe98aa7388aa974295b1c6800d14235b317d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmXr!<>gYF&=XV2z`*brh~a<<$Z`PUVi6#b!Vtxf!kEI8!y` z<&aofl969zrJzupky@0KpPbF*ker`al9*g#1sBT6Ow2bhbV$!l%*@eC&d=p~$p|!4 zlkt{7QfX#RN_TZlX-=vgNJlY9HwzO0L>N8% diff --git a/data/transforms/__pycache__/build.cpython-36.pyc b/data/transforms/__pycache__/build.cpython-36.pyc deleted file mode 100644 index ffdbfe70d31104c3423fd321765fd5654a4e4981..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 797 zcmY*WO>fgc5Zw>QPTZsv0YU1a>IvaXBDJ>)p_C>-Brs88B(y@Z9B-OBvc1u+gJ_hV z%8^JM_!Io4y>jYb;KX<%ny}V9&CHuOyE8s*G~8!DzJDH2gnpx)12O7=spkM3F~l(^ zDV`BVIptPLGK*Ol@hZ2u^9{2KCnMz5mZxqfS`=48o*f^jNhH1|`Sg0>c4CniQCytu zBu_ds-ik%$-oX{fzr%nY){SA5bCLCAq(B?Qq-5b(V0&N}VCpA8fo6DxW@JVUS{$#* z4Ow9+fvJGmChy#0@T(mtq`^lQb!=WjTrWP~(8rd?B+aO_mc~>HC9^ zfp!P|PrY~H``)>)Ya4$QbeVG@vbj(bZ4W1^EO$qJ)(eB-dEaM`Hye8^WU?&RoW4$z zxwZzw53e*GL|i+A^KQ5AzhUmC@Yi zsIZVxlCwwozxS4jTwOw_YxnLiB%eU9KZmV0kBX>$PpI~Ik)*sezt#uF+saiP6zT{7 z;U>1=tK)sJI<_&vhqR1sT&40URCqY>Z0&?07jYP}W+7yJ^(9e>$XnaXw7d1C12QwA dX<**B15IFc^+hK5BAvXfK%{H{i@2mt{{j(s)kXjS diff --git a/data/transforms/__pycache__/transforms.cpython-36.pyc b/data/transforms/__pycache__/transforms.cpython-36.pyc deleted file mode 100644 index 623ac7a5745c4b9d371b4d67793f114a18ae29c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1939 zcmbtV&2Jk;6rY)0?>d{fEm4#YAz&0mE#_c11VOPXoQk6MLWD>qB#UY_@l4k1?1wWu zPVKPa;vjM05Q%bt|DYERocS*}v8wnG2P=O7mx=>#cHP(kfsmNd{C4*3o8SAG_w21o z#kqd=#mDz;gnmOa!-V}dtmIVyj#`LgP6FJ*`IEHBJ;V)eo+54vV`Q{UPIghXbiCzk zv%c!YvO#I!vv}Y~-mvd%x8q2$wrb1>U*GQXT00J%b1;E++8Un^aHlZ84jX~MENT&s zTL!<%=eTo;0(@i=@>vII=B-!Ve85Cub;h(NSeLK&6tWRVvL z*m-^&Q9q&#Fl3&94W|MKL_&Sg?)d`|BsGUl#*KoHPHfP-Ofh<=?}Y+lQ$Tiu?hR?H z6Gt8uin3sObXN%4QL2|T>UAau{!uNKUcJZn>zi-gyj8pT#;v#Ctifw;>yGr2#)Vbd zlkpzg^8;TE8}va(%nGRLFa;ncv0nHV_aG4M6Mf_d0o{XBLhi>h6nyFxO@an}-;eyT zA8OWKEb}Arevt-FnG}pNkNHueAXU9Spib2+M+Z3A;D2$*&8Z(O>A@Y*+XMa|KN|+Zfe>#l%$qUjK}Ci8gtQa99|tG0DSdT8}BtUS8M&?^dc^VS|gWL@60u{giZ{79!^4bx)yL4ATuX2n`=({MKmHO zB~?~)%IVHS)=Eogg!MeJW~HE4NbS^~+BiV*cd0eCet_gU@Go#Ym8I6Iwo$$$2mew# zm(NW!@fzZ#19FBX2fr#D-cyJ@EyJ`{&}Sr_gK6vCzHuAnI(fVh$G_=lOPHJgq!VrY zCu@-P!}X7V3F^t(k#IHWJO{3K`u@%hfa;aZg35qjyv*)LzAliwq_Pr7Jpo1LAB(@# zS7!K;0)@CAai~nDI-qtaRc31@_?8!7)sa`h04RrEW;3Nk*i)IQe+jaA#iS>co4+g+ zo$BVDn&D1{A7x~)nUUdUUcv>upt+z{+bjrN_hooXHUJP=#3rm&vV@n&GF~PWufkl! z8!)ev4O}LFui}Da=ZPWpAB5BuEaw2KC8?7l^}m)ZY0&K}Uju-K1M3kBh3jUH>xMD! z2YSEYx`%xhOupEz%j34|%0+#!szJBm4Cp|l&cE)`MDv#&lQ?!R0|#pQ`%4;hLuOXI d*M;A){Ob%$PFm#TcHzo9+TWbdBxPJS{sg&n^~3-G diff --git a/data/transforms/build.py b/data/transforms/build.py deleted file mode 100644 index d248061..0000000 --- a/data/transforms/build.py +++ /dev/null @@ -1,31 +0,0 @@ -# encoding: utf-8 -""" -@author: liaoxingyu -@contact: liaoxingyu2@jd.com -""" - -import torchvision.transforms as T - -from .transforms import RandomErasing - - -def build_transforms(cfg, is_train=True): - normalize_transform = T.Normalize(mean=cfg.INPUT.PIXEL_MEAN, std=cfg.INPUT.PIXEL_STD) - if is_train: - transform = T.Compose([ - T.Resize(cfg.INPUT.SIZE_TRAIN), - T.RandomHorizontalFlip(p=cfg.INPUT.PROB), - T.Pad(cfg.INPUT.PADDING), - T.RandomCrop(cfg.INPUT.SIZE_TRAIN), - T.ToTensor(), - normalize_transform, - RandomErasing(probability=cfg.INPUT.RE_PROB, mean=cfg.INPUT.PIXEL_MEAN) - ]) - else: - transform = T.Compose([ - T.Resize(cfg.INPUT.SIZE_TEST), - T.ToTensor(), - normalize_transform - ]) - - return transform diff --git a/data/transforms/transforms.py b/data/transforms/transforms.py deleted file mode 100644 index f556181..0000000 --- a/data/transforms/transforms.py +++ /dev/null @@ -1,55 +0,0 @@ -# encoding: utf-8 -""" -@author: liaoxingyu -@contact: liaoxingyu2@jd.com -""" - -import math -import random - - -class RandomErasing(object): - """ Randomly selects a rectangle region in an image and erases its pixels. - 'Random Erasing Data Augmentation' by Zhong et al. - See https://arxiv.org/pdf/1708.04896.pdf - Args: - probability: The probability that the Random Erasing operation will be performed. - sl: Minimum proportion of erased area against input image. - sh: Maximum proportion of erased area against input image. - r1: Minimum aspect ratio of erased area. - mean: Erasing value. - """ - - def __init__(self, probability=0.5, sl=0.02, sh=0.4, r1=0.3, mean=(0.4914, 0.4822, 0.4465)): - self.probability = probability - self.mean = mean - self.sl = sl - self.sh = sh - self.r1 = r1 - - def __call__(self, img): - - if random.uniform(0, 1) >= self.probability: - return img - - for attempt in range(100): - area = img.size()[1] * img.size()[2] - - target_area = random.uniform(self.sl, self.sh) * area - aspect_ratio = random.uniform(self.r1, 1 / self.r1) - - h = int(round(math.sqrt(target_area * aspect_ratio))) - w = int(round(math.sqrt(target_area / aspect_ratio))) - - if w < img.size()[2] and h < img.size()[1]: - x1 = random.randint(0, img.size()[1] - h) - y1 = random.randint(0, img.size()[2] - w) - if img.size()[0] == 3: - img[0, x1:x1 + h, y1:y1 + w] = self.mean[0] - img[1, x1:x1 + h, y1:y1 + w] = self.mean[1] - img[2, x1:x1 + h, y1:y1 + w] = self.mean[2] - else: - img[0, x1:x1 + h, y1:y1 + w] = self.mean[0] - return img - - return img diff --git a/engine/__pycache__/inference.cpython-36.pyc b/engine/__pycache__/inference.cpython-36.pyc deleted file mode 100644 index 0d3f1b614f5625d2399128d222433f32d125aef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2186 zcmaJ?-EP!I6dwPs*CZhcr3JO6qpC$&DVU~QR9YdFC~OKU3GG6mvZ&0&GrRHPpJhCo zlEuDSB)BN*GxV~r(C6sY-1aK3z*WzT!zQZK+L{@A=A7g6^PSH(78m{3zyJEgZX@(J zI&)d@ya}V+fr+9JQG=SP5gK|mLlagjwK6-j4RvOxPUePg)(Ttj-lh(9Um2lCThx1n z!ZtM@ppHNN#@{3paZvCs#^nLyX%Rp3H{&7~Bo^KIR+^CFtBuWJMv^p$i_AX;C(vHU zkZvy@COPYv((P|V+1B@RxmhF5ILV(S`7lDqqbk*${3k5bQ}Hr!4tD~YPWJnR%KVt%rwyR^~b2PArOoFX&~fdxOTwt zf*;|*B#%W>G+){;#KB2eB&T?vi1>h&jd-7l3D3`D zr$GSteKxmD!vg=3fT1%vPVxccEC;XO*GIb$n}7y&xiEYf7hsf|Fe!M2(c77MXza1)Mj*ZIvJC0A4cii3sS#mvd|4fT{6D@Z)1{iwqHXx*g6Em5#mms-zE-WM%utCkmDWl%@7 zD~r1N+^4O#R$^2(_1;>wo8LLnYJ=7r(DKh{o%>I%RggS4T4;1<;0K__9W6FA15Zn% z^VGSFfKXbsr#)QIGRoIQ(DNFd7gy;j5YLsmtz}l=q+PYDHeI@eE~A-_>iJ)f8=PI( zn|{PuLZf|BvJ@yWm?L4j(#r+o`27YDku>vSy1cDuiJdZ1=yJ`W$6rG(J7(x*#{=DgO{AX&te0dgb3{G_lR;ce?Xq4rm(}TmZ>&rVT1C1ePBp!vNpU z(<9ZRNmNI5+RjNipCyTQhn^)XN| zI(F2gfHD1Kdv_bh6Mo3naUX)X_Og5PM%`_MI~M;Ggt+Pw{uxZ2W$EnRzumhh-P^rK zcei`8l@>$zw+v-_$izK(W?b5k!$R5*dk-E;zu$}cTYKN#-TPKLW1i$fqm!%Oi)`=o zwjM@%_xrnCp;fx@8_0-|7N6wODFx(R=dt5UD;^A+R`P)*qO>3szSPbqS@e9u_)(K; zS9!yD*q*m*XvJ9^TI!!?aNS+aq-db(0Te@{D_m2Acl& aZUURZf9#g3nWie+@J!EGFqdurvwr~i>Q*@b diff --git a/engine/__pycache__/trainer.cpython-36.pyc b/engine/__pycache__/trainer.cpython-36.pyc deleted file mode 100644 index e30a38da0f701ad14903b92f8f3e42c8abc14cea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8991 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 XAI7uF7kCMu7|5?Xj6VX*s`vi@Cke6v diff --git a/layers/__pycache__/range_loss.cpython-36.pyc b/layers/__pycache__/range_loss.cpython-36.pyc deleted file mode 100644 index 511ced7d22969dff0189f88e45ee36fd671bef12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7380 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 diff --git a/layers/__pycache__/triplet_loss.cpython-36.pyc b/layers/__pycache__/triplet_loss.cpython-36.pyc deleted file mode 100644 index 2ff0df0137689b5737fa0c2b47f3cb3bff5dfd13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5115 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 diff --git a/modeling/__pycache__/__init__.cpython-36.pyc b/modeling/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 2a4aa1a5dae9d28cf93d586c03e25b1d53c01ed0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 466 zcmYk2%}&BV5XX17Ez|;PJb3cJwTS_YF($;AR;ZB(NT4TTvMJpPg>7rP<)Fcn9(@fD zzS3Sj`3jz#HpVc?|CgDa-TBzlTFp54c)xcrLSJah2>2FA903@bB8C~^I3iPm5mT7@ zhNcSBCde#3pBt99&K619uGhsPNO|I~49idA%=5GM{}B(pq;+D=BQN9)KZ%TQXo^fM z^(#*VJd6WB@0yzeDuFs6(E@DH5-l;qE0P{(WP^)XDX13IfTd;mReK>D0#lKp)YCx3 zL3Y+Mb*T;Rx=vrJLwn$)c^6sf+Y^^g+;Ok#$l7S^xMRCFq$AtCfoo3ZR;sQuapg|# z(`(0eO+_mH!(3M4bwqvc2@wdXMF|V|CrWpr=+9xJS;S#HZ&Dh@VMb}=@kv%@>yR^A zAQCD-B~|4Y DO51aB diff --git a/modeling/__pycache__/baseline.cpython-36.pyc b/modeling/__pycache__/baseline.cpython-36.pyc deleted file mode 100644 index ea4b0e7ff6db4b75db22821f9487528b2159e9c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2422 zcmZWq&yU+g6rQmi$8oaT>~_1Q0;&a-LIm3W;Dk!yICgeC z*>+diQ!4dBCH{?GDug)jcW|65r{3U-kl=gc>~6PA~OfBNy; zpPP*R!Cn{+^esH)7Z8F4OmJakJmC1ZGd{Kgi!XgvNS3lrg?vF>TktGuA*37+b9Q#%!+tK z&dXP}`r|0gHsfOKKgUtnc86;#&!2PXP~H1Uxt*w(rZg-(H9U9ll)pgC*pLnR0iW@q zCHS0+=E#=Ul|6KZHTYa%(=DFZoEcjkHcz;7+%A_UrjD2vV)jqOcvXy9%|;FR?0?Z8 znCJ$gmk|97D_>mY3ZLHba+F}m(ek!-zfAKalG4TvB;8Hddr=-1Q`NCFkF+x`MAC=d zjKH~5aTb+j7-}yJ^Jttvb9!km zB;`;$X`U*5Y80ho6e!HGTa<;`eUPO6fzl0>t5i|05Y$bhQoB(P!3iC23@>d>n?7Z7 z9ozlAzIlm`oMEp^-KZob*_`a@wQ9c-=T23)c-s;p%2yy5_xLhjytHiQGpvL>gPN`_OY(MuzRG78r8(qpuQ~$My3G$f1dvJ``zxno4}i0 zDshzeDwhoj@-W#VK_@r)lgrR_eUUcVCi^Oh6^M={*GNA@g3?oov(WU}6A3YSOnYe} zUxTxx0#-R$a1dN*l$RkA2DY*Qs1NMNtOx!I`;iwogm=T#im~ov=CGg+ z+EYK-8L0P2Pw4M&GRH4eb(WoGM#l@E2oo0np6`h3?xHI z&;rPj8SQ69B*IA~qjANOm0Kd3sB|~EwcEc}6xmgw?S3@T&3rnp_?48}q1WgJ$*`A1 z${!i`GkhPvdorz7IhP*)bH^}bnrpW`KU=RTYCP(j**;6tC7V^IA&{C7Pn%pE8e;73T zSzJrTS`Vy;@6D`F*>@KXkk*+!a^?9Q;tW_iv(K?1cuN1ohMo2|Rf?=_ zbE}S{YpRg(Ks$tS?W4J?Bot|^bS*9>dtt{hR}NYx8wt@s4Fcbgp<2h&m#!<{#OdzS zRjbB@E25!WeE;;(<&Fu}@k|TVei#C&(~Q1HtuWk~Mp^ZBlJ8(AgHQP(X|%asT71Uh zB+J6^`2B~#HkhW~NmVY<)R@N|tF`W(F*NTqbUh435hL~^I1Q_Vb~lPg-2&9y1l96H pnI3S=GVR_qCp23ezq8Uz7x%7Lcep`3DCyJSSRQE9vb|HD_aD6-HOT+~ diff --git a/modeling/backbones/__pycache__/__init__.cpython-36.pyc b/modeling/backbones/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index f12f47c9c8b5c10758015c3d2d68c40833faa355..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmXr!<>gYF&=V8Pz`*brh~a<{$Z`PUVh$jY!Vtxf!Whh;$y8;@<&aofl969zrJ#_L znV4UZnU`K!%H@!ppI4HYTw5AD@z+ z93Q`up@<1+E|~bGpr@akpOTsbG)X@xF*!RaKQFadKR!M)FS8^*Uaz3?7KaT`L1|8^ L9V^I1K+FID>`pP4 diff --git a/modeling/backbones/__pycache__/resnet.cpython-36.pyc b/modeling/backbones/__pycache__/resnet.cpython-36.pyc deleted file mode 100644 index e8ffa12fe92fc80a458d917ce13ddecd78c0b2d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3257 zcmZWrTaVku6`tW;)MeM3jpI#R*GSx?3IaR3n<8zHwhO08i^35CyF~z@Ey3k*cPUY% zcF2w81ve-l19_>7KK8i}1^SofwNLsBed>3H6eT1S=FHKV!{NDpGspeD|L#Bj_NTw} z8T&8WdMxlK7{%{E1RFEKg^}_x*RwG;Fq^3{Gsh-pzh%M__Dd%0*qm5Pb8JK62p1B! zkvPJ5#)jVYFZ`46s=UbMC-?8CNtiE^?EJ-*e-hju`X%G5gcD+h9KOQ+N7IQu%n%|3puBOuj#b@9I^T;aWJA#ob zBT2@7F*H)2-s7`8`{qa}8%g`-P<0=NWppvh|ocSt*jzW&y=Ta$l^jdum!VTmUl>pt46N@E`WSdk-JYauKKSKf@@#1*!OrQLzc;CBH%ZC%iHn&S*Ka<&gOwtlF*2X*pN0 zX-8gQKUeRJy(;5lroXV>*F>KAXz0lu*dcEbd4tFvk=Kaq6M3D84wfYkz$?B`9zv3c zt1wk&epSjJk%}hwNWneJrNIDht|#9v;>#-SyPz9aM);Xah9q9Iz$Hx{b_-%sn6!?rI$BHS!+h)|R~A z$or5R2dLskf1puhFj}3!TJ6?KviWE_*~MiyBPifH+;!)Tz3zRp-la@l~Fuz!P^CF6LlWH<*RfI7q`6u~d$p z4x9O?nU9JQ#w`}m1132Z5wEleg+d7uyD`-1B@Qu18m&E&*IlR zb@p4J&~@LQ7nE}v8ZG_>Mz9;ZvIL)+#a%?6RYt`pe4kBC`J^-^CI*mvBS&tj9?VxZ zR_wL*k}r)L`<&f4m4nj-)uG?8Dtl=yId6BR8e2RlU8<0!@f-H%+c)m^8%vx^oLzqV zHKT7=&fn?eu+}HXb|xvm02-aHcfr@N?>~z#ui~ss!nDpBB}_Ttd>&^w3}l#{$9Rh( zFFz*omR{Fk-vV*@a}x7p)8ln>A42>Xqag4C1nG$HA_IG-#cv}IyZkobXPtpfHMD3= zJxN2y|My^YqzI`gW?UmHamYd=Gg}TPc_Xu14zboUUL&u&g}fhPcX>qQn8-&&sCWQ{ z+W#Muparqo!M7oMhEY)57~$(0VF_0Ujbja_woVb4(9lkO3Z`7UVk|zWD9sOUaJ{I^ zsUz=Q?vi^;R+$G3DaO$OprEAhevM*;8^%Z(XVK77cA3lQLRo1Z3gs7NSjK@!qLR+* z`HNuPLB2j;gLzn9D1RQxaHh57FJZ{{{8K*d1yxeQazRj0yXkR*U*BpR+-OAv7W9}H zgrM3-I%XFOO5KvdyYzJm#F@ANO3aC|F%2Mhsvd%}$?t*=c-tvkssKHW+P-`T>hb}R zpAex0)R;_Ns83}1IdM;kyho%h<~4Ha6ZxlDqT<)d_W0etf6ME6t|U3G18xwAJi>YY sgtquK5o%E7e5nIjf0uMO+t-}Fn0TMo@%|MVt-oLy9&RB$bML+X0}D>Ky#N3J diff --git a/solver/__pycache__/__init__.cpython-36.pyc b/solver/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 3f94541c08500751a729946152916afaab8ebfa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 310 zcmY*Uu}TCn5KXeXdMutOSXo^m!Zv$~g>Z=M2dITt2#YYpB)H*{%QBl)yl=4ZH~a-Z zC9RdeU}e%AIPe~C-ppf|i|MpH{dj-;B7}TLY>P$JL<}d9Bx#AHk{N1Q%WT$WH1(Ou zZP6A{=Sxx*o6EA{qwgFpX0xGFXq;G;jc{wvgjj{o=Ys(lASt-ZpEhQkMrcI<3ztl^?Y#VMd2JkueArL`?oN;vMvR#i?}nSP|gnMA4*AA AR{#J2 diff --git a/solver/__pycache__/build.cpython-36.pyc b/solver/__pycache__/build.cpython-36.pyc deleted file mode 100644 index cd832250a1d7700dea92289da7f206f9d26ee7ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1261 zcmaiz-EPxJ6vyYoUkOQQyIm+Os(OXwo3e-tB(z#Jv{|-Nldh5gq5^r1XGombaXWT^ zBKxY#-LAv~>;u4i@Dy{)6|b;Ydyb7l_z;XW|4GirjOU!6Z#0|rtFQik_|hWe9a$O- ze(%6cw?G6rB7zDQ(IYCjF#aM(Oqjxgl?yf?uKnU>eaD|?<3!!s+DgY#MM*HN?*z## z^MmZx!W4ym^7HkbQS67&c96vN_pm+b1$Z0|2PV7<*@c#)vN5Kn(O3)-zuz}<;IBSW^M`gFCWpHu=`2t zJ}Dz@!KX~U%ABk=saKXW1{rw9Ibr<63VXKxx%Z3~c5Xun%$_zLhkojEZ5{i{k5kPe zr5n#=I2vc3kb!@y`QXl;OSKaxv7BY|*lp;QnIB8xl_@flD%DLTPv)VLsW(!-(AMDa z;9jS%?c41^$2;ij#{JIzo!^JvUT3%cK(}u1w+CSMerxXz5Bqv`+3TTGw+{ap?sxZ( zI(@I#?sl|2l9``nN}E}tg0VJ}<1CD|(>?5Vdc(V2*U>z9GSX(82pK63ZP0uwPqq2f zkLFStU{EGnYh`BmLaH}JT>{I0tJ~MoBzh{BRf`5k!zC?xd1r;2qC@GpWayDt6ReZIC2@KV8C$BxhkH+dL#NOp)g+EqR z;Z}tVkyXO^t8LEbY)llb98YoSa7Rq^)6_iz!HIyGva6?^RLaeq6jRqVJ`fgpV zW5|yfvJwE5Qh9+2VF{C2^=20^;3CSR^J=4vUo_RLGD`+3xr_mqKW)ADEX>9qLXm)U y6XaVMY*4iY5w4+a&l5@DdDYdBj?%MqAmXRWQ=MM`+<7E_MMhJ+yulpqto;uOIVf%b diff --git a/solver/__pycache__/lr_scheduler.cpython-36.pyc b/solver/__pycache__/lr_scheduler.cpython-36.pyc deleted file mode 100644 index ac56d2680c136911280148c2a62da71afc82a20e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1600 zcmZ`(&2J+$6t_JenG9*!kD@JQ55pd|8-cRr;{a9F_5fN5?Jm+*fE0nubnGOP&SbK- z12jx8q*AvM2ROoiz@NY$!o^n(tK2wn+6%llle9%EJo0be*w63%=J{v8x3Uu6{prUq zZ#M|}lU!*o*!$4+y8wc8iJ*dIG-q8#(RMPY>pURB72YWko^*!p&>Q+Qr`r(D0crcw z55xUz6*vVT?!PLSUDp-DjFgv}Z!-k*7*+hPB(3sg|)T;=jkXloVNq(YMJ$HvlyE+Pp9CqimYBmxQ1{Y;Rb*WvsfE0$3-## zMKw83U_f*J8+ozbxvz`t8>#MRitA(`#UzueGd@;puo8pm+W;iIMj1T569Bq2U_Mbgvq5UbTg}RkZ`3hffZc+ONV~=B}-( TXu(eX2fKLjYW!C$TG03xaeb0> diff --git a/utils/__pycache__/__init__.cpython-36.pyc b/utils/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 99041a69568c1a35ca0a935ad7ef96071d0c2e59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmXr!<>gYF&=V8Lz`*brh~a<{$Z`PUVh$jY!Vtxf!Whh;$y8;|<&aofl969zrJzup zky@0KpPbF*ker`al9*g#1sBT6Ow2bhbV$!l%*@eC&d=rY(`3BG9v`2QpBx{*lA(wR tXeyZaC9J1kT9TPltREkrnU`4-AFo$Xd5gm)H$SB`C)JJ>JY)=yDL)@PDS zQSv@-wdjjhJAJ3s?#S!=(vj{b)(@m7ebk{0WQe*WJ2FBYNwLk6g~NN%W;!+d3c7Ku z_j4#!HjXwkRhu+3-9N6fNY(8-n|oDSleB>E#_zW9Xn54yr=yqTX93E{iA_kGSB=e1$J^Ajdznu~&22 zF&ZbdXT0J1g2BGbsT28zBN5R%yzy`&-btaxE4p#5;$czd@lZ``8K)+`_I`FPzFzFr z3UZkwE>LN$UuX)m-UN!;SbwOXN=+iHJ4wwxEMZK`Y%UfkWii{&v+-b_cn&=}L_u6! zgfjpH1O1OlVX&(i{;;wQyk5)#MX%Q@<*23zdVb}>6 zDyVT9`~eW;+DsT6`UYW1A${q6acS00z_t?nl@wajbNk90ms zA;lrliGT|j0~b*we%tMN2Lc?9I<0azL!VbsSXWM~N#ej7dCrocGXKvtdJBcgTe4Ky z-(;6*mM-IavS5S3K&osofPm8JXds+6P&k;>Ui!0I6mvY(y0%d50e{^`vkh(Y!v~d; X(=y-i(4{Hg6(Pq*L{8WVgV6s4N*DIW diff --git a/utils/__pycache__/logger.cpython-36.pyc b/utils/__pycache__/logger.cpython-36.pyc deleted file mode 100644 index 1a5073e0ff238255b028eab168b33216c3514d0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmYjOJ&)5c7`7cJX>;vyYf7%v`GRV4&wh18i{KBGL1ziH(GDMw!g>Wu{{%27!!_FAwNpD80n6E7jB03OLDj?BnKmBOxS7Yv z6<*Vt?!4f{=it9~LG9FT8|h@-nzjt9AK(#~gRGbJYs~3}aF=^mWbM`7E(`GeSZ|vJ zF72Nw3>}8pdfF(#iq*;Skmhqc z8d^v$!b97rv$UMq?o62Xz=g6M4YWyP-Pdnket2v9)3)Y2R`MLq9et^rKDexm?Vd_i zFk?XPLEO#?80Xg!2d8N+t_>o!rAub!mS!?7L*LS-Unt8iM9fna9q|-ynSQE_;IU%m z!g@`cP=X|L+daRjNY3ZKkh%*m^Y`}Xq%vu)Pqv<;?3| zL)-%nlTdtT%Za)V9-(XfIOZ~mW95Rajv5FWXpY;0dvFgl+j$NzTIJ$J6QDZ)6pFxf F{s9CB%y$3) diff --git a/utils/__pycache__/re_ranking.cpython-36.pyc b/utils/__pycache__/re_ranking.cpython-36.pyc deleted file mode 100644 index 941e5f8b8b90f691f7c3edde5a573d308ea3d009..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2400 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 eDz$Wh=-#cah