From df20dbc74a3cbaa2fd763dd377366dddd6181e36 Mon Sep 17 00:00:00 2001 From: Soumith Chintala Date: Thu, 8 Mar 2018 23:15:49 -0500 Subject: [PATCH] Revert "Adding a DatasetFolder class. (#442)" This reverts commit ab03dc4370acaaef05810465a077691472624b2b. --- docs/source/datasets.rst | 17 ++-- setup.py | 1 - test/assets/dataset/a/a1.png | Bin 20873 -> 0 bytes test/assets/dataset/a/a2.png | Bin 11638 -> 0 bytes test/assets/dataset/a/a3.png | Bin 11157 -> 0 bytes test/assets/dataset/b/b1.png | Bin 13191 -> 0 bytes test/assets/dataset/b/b2.png | Bin 8996 -> 0 bytes test/assets/dataset/b/b3.png | Bin 13672 -> 0 bytes test/assets/dataset/b/b4.png | Bin 19690 -> 0 bytes test/test_folder.py | 59 ------------- torchvision/datasets/__init__.py | 4 +- torchvision/datasets/folder.py | 142 +++++++++++-------------------- 12 files changed, 59 insertions(+), 164 deletions(-) delete mode 100644 test/assets/dataset/a/a1.png delete mode 100644 test/assets/dataset/a/a2.png delete mode 100644 test/assets/dataset/a/a3.png delete mode 100644 test/assets/dataset/b/b1.png delete mode 100644 test/assets/dataset/b/b2.png delete mode 100644 test/assets/dataset/b/b3.png delete mode 100644 test/assets/dataset/b/b4.png delete mode 100644 test/test_folder.py diff --git a/docs/source/datasets.rst b/docs/source/datasets.rst index 230f9ae4627..3f61ae7cbd8 100644 --- a/docs/source/datasets.rst +++ b/docs/source/datasets.rst @@ -4,11 +4,11 @@ torchvision.datasets All datasets are subclasses of :class:`torch.utils.data.Dataset` i.e, they have ``__getitem__`` and ``__len__`` methods implemented. Hence, they can all be passed to a :class:`torch.utils.data.DataLoader` -which can load multiple samples parallelly using ``torch.multiprocessing`` workers. +which can load multiple samples parallelly using ``torch.multiprocessing`` workers. For example: :: - + imagenet_data = torchvision.datasets.ImageFolder('path/to/imagenet_root/') - data_loader = torch.utils.data.DataLoader(imagenet_data, + data_loader = torch.utils.data.DataLoader(imagenet_data, batch_size=4, shuffle=True, num_workers=args.nThreads) @@ -22,7 +22,7 @@ All the datasets have almost similar API. They all have two common arguments: ``transform`` and ``target_transform`` to transform the input and target respectively. -.. currentmodule:: torchvision.datasets +.. currentmodule:: torchvision.datasets MNIST @@ -78,14 +78,6 @@ ImageFolder :members: __getitem__ :special-members: -DatasetFolder -~~~~~~~~~~~~~ - -.. autoclass:: DatasetFolder - :members: __getitem__ - :special-members: - - Imagenet-12 ~~~~~~~~~~~ @@ -129,3 +121,4 @@ PhotoTour .. autoclass:: PhotoTour :members: __getitem__ :special-members: + diff --git a/setup.py b/setup.py index 59805be6268..0f46586deec 100644 --- a/setup.py +++ b/setup.py @@ -33,7 +33,6 @@ def find_version(*file_paths): 'pillow >= 4.1.1', 'six', 'torch', - 'mock', ] setup( diff --git a/test/assets/dataset/a/a1.png b/test/assets/dataset/a/a1.png deleted file mode 100644 index 52d23cd374e0ef03225bf6ae7a4d61f2558115b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20873 zcmb5WbySpZ)HW&xB7zE%LrQmdDpJxl3?ReM-6>ttB}k_<%+M(fQc6g7cX#)B#^1ZX zf6h8*z2B_mu!MQ;*n8i5U-z~5o)9GkDNJ+_`lCmWFh5C)t2}!2*yqtBly7K{f!~xz zOWFfJUf4=&Iy`#x@-6Zo%A@2|0^pa=9Y4uSJYRnD9FrN7$a3QY@GBBCH4Vp)Hdad}0N=B9B*oz?OYF;zInww;knCvH77L7!%aeqS^NmRFCID1#(Lho!)D}h0H z`6D8OaCSUh;H^u;CxX3;;AI)`X28@6yoEoT1m6DVua7N(kNnSHQF#8(NB%Dd_-_t_ z|GNSHo1^RB3jX&4{F~#yE&T5X_1@UubBS72KZ0TUX%f^ec9J}9fU~FJa|&B zeEv!J_SIIzV@pCFq+YJ7huwup$;ilDvnKGv0!Ak|ERo7N;dB*ZkEG-XpZ&XW(%s#C z<-tN&gGz)P^_J_vosalc(8q;~6~4%o;MeH`8xqQ~Mw&Ph#sLvXS@bC?E$9(kHy_lO z9NaV?*tJS1GvS57;qkrHHZ?E)o0eZlMC4Wbpwpan?aaZ&&7BuPpdNvW3>eHU|54-% zPYPDF4ilb;=|8QAN_p1K?0L03T%YY&*ILY+e-T>t4AKJ@@pCDQ?)USVr~fUi;L(L= z%gkQQ%wDa{LbKOh{hW0}$w$+aJXa5o)P7?yc+5#SGJCJ|-x{Or`H1UFfVpS(&U+JB zFD@=%%^p*hJe~^%u0eVlOn63`=bo&L9zvv6-VsO@%%fF9JQr+gXZnpRr!4R9Zw_v5 zZuXo7BMoE<;qWQT@fxdzi=cLtxwKcCZ2#6>`hIGm`G7a2U-aSD!5jH%SvYtd^d!?* zyEL2?gdyVd?_)N~u;qbrzAgk$iNSK=FbO*i}{$nPafF7(><{}6c97$8~9pIRCTLz<>Boebzy{! zH~cwWgC#-j1HOdbf8)8n9M#eDc4?S1u5|tK<;RP}#S=@O_N{oMI-OD*Yil^1p|=9g z@OVfh@V}h|cEO$|!Vy71K{Zx|O=6jLO}%UOO**COh&(eut^Rx-kNy)LZiL;G?jD+4b^JAF{<$Fuv5KkkhI#-Ic|#cf|8iSci5I>pUVQBhVi92eX7_g+BVJCWaXw$$@i2|RpvA_^R@A4MtMD#*2+`LX(-}_*Hf4g3% zSlvjI!*@7nXc7fDDLaGXlpyaG&l^clVjZMNqhJSgc6YipGB-D8UR_^Tr^%9lRu+}{ z&ti9U6NbE6Or}rn?mUTw{)|(u%VT>qH#9UfH5uJYLML8{{5uAXLpRtS@u)UDL=*!- z?Y_Xrblx@b^710a(9fLq;@IzB>xR3&Om>%8IY?lIO}bRg>;XqF(6u zJDe(nA$@crFWhFrX=X2el=W=jX-1Hq?$+b;i}k0Kw1plucidgz!SytxYvH?#@kpF+ z4P*88*jw0GTOeIq(U2pN*B36*U;(g*Hz3qku(k96LAu)L_!NC-7cW?dgGq)NXw~UEhK+slx91DzUxP z;oi|-U$?VGt~fV%e))2_k>TC!d2_zjn{adE4)U(v$3LS!yV)9{9n*;>I{#w{cuDON za2lLuU_~(hAcQ0Sg{{ZQsWSZAA5I3MTmkbO(hQfGq(}v_jH7WCCgE+&Ya+@1@q}d< z$M-|IOc=}X7nt9Gc)BtS1gNxfstC?79kD5*RXSlQd_0U4)%w6oD;&6-c0RmNN^{IW zm!V|f_UT<}p>DQG<&<0~<5_2o$eNpLYVurVh1>W<*UEQSqx1m<@ega5CjBMzqH(r& z;Iq=f9p#%!-gdr7@$@ahYhY8Pq@T#=MgfdT$IXV>TF=O-HjwY9bKBV6(;iwHE&Y?PE zxAWM9G&h(R4oDNHlP}UpGjc@(N1~BvQP|DI!?4pcuMMq6JYiy}^O9)eq%H>Qm0a|Fs6$-UDcc_4M zyz(hrmO*6In+&JK!HjCaqRi8*&b!1RBP{r&Y0 zYkk!C4tJZ$gbpD9Ped8&*@GDPV+W75LG)jYh^5Tnt9UTPWu=$ax}ED2hTu@C24W~* z53MYGwdC=fn~B^{nUL&@v>scWnC1gj8R$gk3MF+sm$3wRXh^|`Pxf8+K|~x(Q(eP* zi3#14kGQ8otpqY0HfZbxDS-&cPmLaZnYFG3+?N{k?(Sj%smee1$8E}2;n&Na55V%a z%aZfxLw{96kdh+`;h!!n9HWfmYt+>0WsLpJ@m@o5*eoNB$tIk+cTpxaCtIUB={@{!u4gpXycY{7!<%!sX2^j47=bFJFn&>AVzcEUmQbC)Yr4MaR$H zE#pu6tAvE>c!sqzXPysxGqt6#7Np#EMYiiBiO6Ym${m*gGk>@m@Fw=)0pgF>=x&!# z2~*Lkx+I=w+@q7PkX4tnx4}G&$4o0>*=aJmqb)`K7nVZj0jeDOG2Do^k<5}K3yD{A z1wXFM6u~0-`Jdy`uW>3C2wqD#dw-k5+{_+ok&P#DK~$BGCP2Pz$6^oAw@e>gct70n zQV*u|8@DW+%p~+u>zQ9i+BN|mzKWFp66r)5mqS@w7!eG0Mx6q^>w$V-JUn)9bV@mM zeQE9MfrEYy3DM!7t~}-`X8g;toTOuX$FF%bq~=oTw^TGpAK5!N;A$-S9NbfWrJ;Oe z*2+K6oAbvpx{uHV$Cd^1Pp*TVt*KET}kyUcaR+-jNGGoaTKBv1%Rjbrd zOL!xP=GLS$;na^!Wpm37NasFHqnc_i?i7GxvmBwmteF);OS0OruHo2%+#{M_c}5oobY7NRno57TW5#Ld%fR33cV(E74M(poiaE)dF?hA2qhwoZ;U%>T4?#&wq} zHWGWCP{DD)Wc;RbWkgZi`>jZxTnpfy#b%J0%^h&M=X*1Ecfzd4dmRP*>zn%?BD7nG zfoYma0AsoiA8fOCeKT@Bsut>kP}PUB$u^D{u6I?LBrs84XO@i6mDr(5pi?*F;1#0r zdmU84>4e#zGKBHuvkA*Y)LdU_uJWJ!7&^{#5SADoEnMi=%FX{9*Al+nbw(Y4o@L)1 z%6VojPt89cyot%4A4xhgH{%4IsVO)B5Q2Um>oOfywWMcUizx9c=!9LYep|vrH*oA~ z_PuE1RkWWHSRkZWI))A;)Bdt7l;_e;Psu&Y%|jHo z%txToh|Y0Rfab7^ANq?YVqeDk1(PgEh{mx#4-J3Ly!^yy7jQI1n?gLbnM7DV~=0*vtA@wP}>Y>ZhMU8sJ`Le$D+ zP4TaxBjYe_)=mH<<;4c-O#>c z#<)^&{e-`5qk_qdON%98R{1Ex)D}A7xloz#&4r`4-YnU2wfZ3l1RQ{Y%=JyTKU*?B zuA@9eV7~4p_3}SbI`J0l-m%3?9BBal*qE~Gxc)N`6rEp5pEtE;soQyC)#h!;yLa;W z<;sHm!P0L-$*ZE(3}%loN_m{_$TVY3-)lCEn>&%*(F@@WU7mLq2&m{87pUp1Hc8Ge(C!!?Ei}@^ccsI-G5_H;I$1 zCHO=gYd=dY*3PNAPH2Pu?^O#*dg3P(F3{vH3WpV;+z;+wu3$G-4^>5j0*JPB9`4Sq zbZj$jXW2wt+jZ3vxC~>IwT(@o-@4?xv|(b8ymq!l&z*V^;#WIo$**1Nv>9ymF@gKu z326=lJ#>aVooOg;C$~Oy!|;+T=>zU>dTN%Rp`-~$pAaGD<~=M22u-5a!73d7Vd zKpaKQwrNS|Mmv%H23Y`X*Dl|O{|uBRjoM_yCaP@opzq2ZxxmaDR_51Ii?=7*hT96& z2aY?*Tj9X^F|2uZ#RQI|C|cJEDN77FHA8^QPVY!F<=3}ocRQsmBA(YBJ(N0-exVH= zf$G|=ecN)4Dl5bYedOztBwYXmCI{b9Nz>={QaRqdjpco77&%PTZPcO7gf1g)SFSPm zQ6;_gjG|BG0-gqO0+(yj-DO%LT-(!Tmuz)A51bo}R&$I+EPBT5>lzyxZh%{W_x(x6 zK!&L5v*H)brymMqStC!Vh>JhB^HKNb2LXyjM9&l0s#BJ(#&1mG-_w~etwoYl!E?pz zT&a4)upN$ycR;0--b|3#=2E%yv(xR?V*7jY*7v*O#ZoE@4>v6jH^8odt5AW%`cngq z=TSzQ<~%?5&$(JuJyg~4B#(aXmHtHPJH#!Z* zR#nb*F^?B>6KJ$7QTD78{pbi>W@_fFFK&b>x#`Sk1b+Q(YXR^N5YWH=C`2rOwM@>l zn#nV}ZeBRJ2$jw*&0)h~{Zy)rVT44F>|0=`xIpp8>HdzaG#bB%@#kbc4GzBHKsx&@ zl_nrVx}B*;$xy+Q`=^Ot{``aflLr@;x70Cxw10;e#>_j{Kg7STi2Rl&-Oe`Z6k%4f z1HvrXNp?K&5b0)Nv^x5gEQkc_iZZ1XU$LP$_!9^phgAFA$7=mON~b@~K%GfLx)B($ zn>{zvyUjLg@88c~EG>PA5=bz;g#!0yX!$-qTEsUhnq9f9S|-^pJMtx*ryWGirbyl+ zCG7h=Uuv*L65gnIZ!d6L;d#%ErkoMp5B{38aolFk`0K#fs^MOIe#cC54>x26h@w-L z0Kn%-!HmW&VqWe!j2JTqXMBq^KZ-urPy=`VDU`-AiRIFG(&`B@0alHj3mF45n5~P^ zA0U=ZXlQc|CPuq6)y7_wFmb_{?PW82`XE=`-@|H8|Pk1YKv}9fgGKPTd@#i8k*Xf$* zE!jE9wgaOI7f)|QgoFytg6+&EHF;QyCU$0KX3pH?akK=kM_=b#`&%R3#h ze{f*r$3HSC+sDE^0Qe2@%(`-S9TDy~R-nv~t_cvpeXS43meNScxUBhLE%LR=Y$NCi zxxRc`qaK~*!n9E;m(x}>d{}Z&eDYZzEqVH}MEVPn?6xnkPRM;VE_38fPZ zWpZ(qFvOgiW0wj<#*&T?`w{5HPsL#%>ZJeZe%7HJRU!@2QTCG9=1q&KJ_P~S{pd%M zJ_E+y83{`pFm@#9tvv#lK(ZQU_Nw@N*D0`@Fg_0EJuM1JwFZNqW{er-;Mml7OgvvO zb$WhhiK9b*lTy7m?i6u~?V5L#a8n1lQ^{}#Lit1EX%~0XCQDa>)F|Zh+b^QdR5CWZ zG|LqP__Q6G{WXooZrEAP=C^Z}JfIu7NPi+ekT-o}7PaApUvg;#*cTcyki| z)!DrJViTrtx+d|Iq@W+Jpx7?HUW@edmY#bK8KAui0g0f0FX^XKm90ocxG zmp!A9VcA^VEJWsWbM|HIBozu&Ity7wWiS{qCNoSV=tf;nI%=6-+mf6w`GV^lasvOk zgxGO&@|%Z6d^^?S>U!+Ko&GVcA!#jcZ;JSNrfLB9{y-#&HXELVXjS<6}Ft!tc}7>F&!Cs zIvtw`nF821CaBUQntjaC#ZNg9!3vK&04z4Y8r}8X__n8%faO3PcLc6wVd%Xllz3PT z++EW;wf9)0NmTytm<_(JKmy&3M>g4VG^^Q(T6^eDM@L( zmp7szQtYnUmy|VO!;2POPV{FaQ$hq|=}IUOrWR!?k|ZA2K6 zae;H!jd^TbPJ$_Cv`L9uGPT(jx9GmlnA>0ePq>e3{k2~8cfquxxUQ!1Gk^&he|G)3 zQ8AMF5hcp85cT zXW#VBP3tbF2womaAZ&;aq_!buJXTjm6=33`55kqtC$%PNJ(96)0|OH^jZ^w8@}nv(npU=SSQ*1;DH%U6Fcy< zhNr~kyH3uAg7F@<=R16yb&vT!v+EjNt{b7n1gZm*#uvlHhXC(dO`)$#Ew(y zp_J0JdiyQbRNI*2XLCZY+ygz(*MtXm47RtkS}#YhLOhWeS`)^hQ?h0gQTzgI;ZSp{LdT zT1+4J;__!w7IeLn>VVJ;1nBd_L!T!!C`I!yNrf1^=(}owwMS{zJ{wCl(RT|yC~Tz8 z{n`%rYu}Gm>V_`eg%R%YYMR!w*_R%-^TB}JYSZ3C>ArC$ttAFJ|l znSboe#h3tlD2`Bjvh}l8w`h465{d7F3T1zshkjQ*GD%n_Iw3mrE~|ZWVxHq3vdcc2 zo>WgyEot@pW*+GSBP-K@2TT2LgE=TG0P++oeQCeUEE(8$vCiWD;I>6L$zcHKWkrk3 zoptT!b(_J7Xq91^4#d zC~~}_Klh|pFW{e%bYs2#ARyo6C!1pNx$l5qHbiJ)VZr+bxYgF$)XV4GCw>3s=h5F3 z%E$`vzreFu7hoMsl*nGssBTIIS-Pm5IF;oEN)(hEKu4D20sGkwm4&* zvwOJ7fZ?bKX1ASoW;O$iE+F6zS)#BRI)kB~j5>gGx%;SWW@--HwW9Q${3Kz80&V}yzS9*JG1sbNn!xaccT-TMm-VhW$5(i0{x+RR zypZ)wefO@ZrDa1q_gv;Yp$mo@W8fzoG@G~(LcN4LPr-7%7Mh3KBG;%tiyHt5J-~{s zxlUgA(R{RjnBjd7QM2_>JmjXBvcmX6=eu@7;*CYyTc`SmjlEqegg5d1- z^73~pW}v)1f7r?{uxZ}Z46Z!JGg;4jKv7#t`R{!r$mM3IhCadIs9p|(=8U4QP>f4lu%^*o`+LsEg`M}!<3t{=Rq{>3*sJAe%b9{IXXu?KCv z=Ws9}?vBMylhB^lD1Spapa4&TdD;)h{Z0Bb#VK;RwB)Or@c0>Ni0H!HTzR5wCMctz z>(*;`K*uqnUC(s1k|$}ztwRAuGp*XUJPPQg!zwYyE4SJ4uEwfYSYPJTaPMkFN(xaL zLL>$$9g2#UP$5-!iOtuU%)K!(c-WRYM;2Zw*Y*nLV~fU>%1)18J|9b02q5oDxa6cQ zey#{Icqe^xA2(Xty4Kvh_A^DItQ^UT|neo5vQOCqWR*@FWHpKCWBI3STQ z=T;zll4C>c*7@thc@l6xV~H>um_N4gI+M@jA&K6M_yn_l^8!ikJHIi1va$+Xh?64B zpCiM4R;i19D^42etLGJsu`n#Zt{b=brYqrXM1_g|--3fB+eNFePQNt&SxWm9={OOi zfklTgz&Qu#?BaNLJ>7|$vUCdP031PT&9we#DCRvcCyP zbd@WnT~?0k3upmJFCr?M| z^PO5^Vf+yNK5E^zOZ)-fWr}tJedF!CSUMK!w)M-(tK97r%-J9JN%1i2w@1~f@qHdN zVw@QR{IX^m8%_(XNUd$X;>*p+ga}E6hwz*fsLS5GI0+j~Xk^{)4gb`WURa++Eu5RP zl^@Hr$&~v!jlnei#uyo}a$lAamsPZAM8w8~${NuC&=kLr_0HyUZqFI9=&*2+>cn8C zjupR89wLhPl-Bd1I|J#aSfWtCx(r-y)xC+vvO5zi@|_eEG~|#?l+( zap)nEPZRd}V-7xH%@cr3@!;m@`|gp49&Zlx}VZM%r|x=G=|(HE-U zjSB}eHE|cYpfEu(iUExAZ~MnhPmNV%a7+r(WS^9Id_%7KRDvzQ>1(4{U(zM%V`76L z5!3bj*;})d=g}L$ZqNL}4OV7VUkfD7*%7aK@c4UzAcaASk2ITMX0#&{ZWM>H zk8!S81}H}{CVf$e1HQ;u0Zz-94UAdxoi=+IH@+RJGqgK`T-g*Sfn8%7XZakN?txIY zW9v3PD*+g@GZeu*6R)i6VHfd&tNZ)(UyO0W4$0A{68<~&#>bqntS1_|es%`x5;<27dJPB5S@tYt}C|+1V4SE;H`@Kiwb?|0NtDTDL ze-EK31_`wCirqkX1x53vcHj3N4`-D^!{Z?d0t84bI4i1&tEGcy!edH|}Le>Wi7fC;U*mRyEx%uOX=!U;te0w+2tJyB^0$SPwxJ&p1UDECuuj$O9nZ zZpQUgMt!|&F^eZ|O?hwLvGk1oV)5g$Qw^RVL*fI_78smbmnJD`;mE)6Ym>33TFAQ{n0m~Vt&8GU0-aY^ zw1!)M6v9T^+0om(^cYdHqjopJg;}kJ7z40*%=O+)dK%^|B}Kj5_P2|(5Obt$jN;R_ zbt;!UMzlG;Vlg*=cK(6WhCE*Qpe3l0b#Fb@5=diLYXJ#lm9Jo&0Ez(>7@_{E`c70; z-eC9azcXly{+6z;b!#|Y;q4)=hXRW)kB!Pgeowlxszl6Aeb?pu>@1f&AokvhSl{(q zHFzQ_e}6s|%C4Rj63=ff7rfz0nTyp@rI7y^u*=*>WPKbgWZ*qhlY7VzFN_GRgEQUN&&XUoD&wdG^J;n6PxRB>e%= zMCo;K(nLCRh0ht9pO?Mo97bRf$f@;tf}0rtVc2rxbMLl$L#gISD4IG-m|KyXM&*ZE zy&JuzEPfteE}b9!v8(ZLSLG0(lF@F(lvq@> zDEk~WKg}4@t!SCL{1j)6ODlBOgETdtpV)&VPMqqxg};nQ5A8S~+zg~TInLCf6F{ZM zE~|_C>^vAO(dycyQ@K-Xmi$xd-CtAH3oMrixUw#Km2oE@P<+v;f5f-qqe>SaBB)N? zL|-Iv{DG6Ts%28Wu(X3OZMloiS`9|=r~c1~4^P~4a~X``u)DR-v-cLj)~{20PNVEL zaUlX5V|~42yyH5bJckq%IKO_+gcN}c?>QxT(j#u^a=+JUj_#40&{+61J(^5>+5K+w zgoYrfjj_Jf>>4~9zDj9)f941Z^!0)Pu?aII1kw?jvTVc{bMawj4uwm9ujM*Ps(tjeq*u!@c zeri#Ck6*Z!ld_s1Gbz2bQ$wr*| zIg4V!+C|YL*}xF9sFi}HfgTjZ&F>>*82}`&O+~YxV0hPOF&9J?8Oxp)Fh(+Le&;U4eOP+H+O@9nwZ$uen9fcfTDPByYDP z^N&h#mGLBW8*?HF^P+AFpL_2!c8LgqC=R(RVaT!06%o5J^V2gVFye43`xr; ztL=@c7E2{Pi45bYq+b)D6@HjXWc>A@Jn+LKC7!a7Rs+jyLNsMJb*O^U6=tRVLl6HT z?6gFkkwz!8=Yb(9v_m@TsN*+Jn@PfRWPsGaA%b>JiDIv*(o8<@&-paLdJd7rUoJ9^ zX||g~Uyw3M#d#^mD&r$PFC;6>s?7s&9Xl)P^wipkVV{A5rerT@FF z3xLqAB8`4+yqYt9H*6<9pAb0bjjQ`t*ek5Ykl|QJlzmU17m55co?~*E%POb6>Eo7lBJ>e_r=htoOW|PkHs8N;^yLbplg}+NkpMLA zl}5ApGmfN-I8;VdQ;{Fn9L`TV_v#fu#QE_+er6l8eG|CofSv@!JPii>-nL$bj!h(5 zw7uKBmB|+v=JVx9tB!@IP;_X}pSXNVBueA|{!_v6;JglDyz zZ`T6vtxB3@{fTV8N7+6O_q(xwoM@AsYlZjiIr=w^Hi}gLBtlNTrb(eP?B9<^Xhzo z$@DS~hOQrgi*;vSpxwb$m;oJS`8DOBiUdvRJ(YFBcrS5kfh z^c@*-cM<0aux+q3An}C|R0rs1COmXf;FQ0^Fb0V9l*NnUW{*L-l5ys57j5q^ImKw> zoHcJs1VaYlWgnMuR{s~+r-Ky649@380v?U5Yvc5Waw-L6RsWFqbUS;7MLEU_j`RvM z-pgvzLi~V@k^rx60KxbfTfcdnDNxEJns z+%ReG!}q%w=?&1fZgOax2~bnNMa>9)tV5lS01`rUjl;BmBa*wIOP)*JlmqNk{zc}S zxL}9}co-4t>1~U&J_7l1uqpdrwqYtUk1|rvJ$I9Bg!U5zYSKAy-MZSubp`)Qn)0eXIV0H366uD@AIW;gp^gvp%4g?rOMoky&zp$OsE=na zgrO}3tfh;d^krGoguy~1E~jtDcmvK7wzy&`)uBec&w)DH@<%PtN2dz8OK>DCNXOYQ z!WSXj@$!c^hs`-xTYUPf+_uzjvcEJfc&^FY4LRAZJt*uP|0V9V@i`gwE{p= zT7gZGpE@XUhs2%{B3?20mVe$CX+qSH9IvGF*$YpZ5P7Ls;nE36VVO6iq` zg-;wbJ+x%tJ>U=zmVfqbbiUwEuVDI975#Gbl{435uExZ^=bxKpmo?A2eu~`>3(BcA zV`2pDCV3@I0J8CO#n| zFNa6PuzyDvR5j1{B}zrDX!)`LyQu3uvk&`m7@lr8Qrbv10vrWFyH=32=7iIP({I~_ zi+aP6sL>iL=mZxfJKm(!fmTjJm-S-;m06(Rw%@qjL1Zl!n?bgfpNC|tYbW6z93o^v zn|F@VofHdNURN9k#&c(D8`XQ)1PbAfq)b|DJ^-#Gu32c~Adf54JW5`bQ+)O{8CMwf zWynsv(Vv0{Ag4B&RIvdAo%|*)%i@4e&_jZz)&?r73 z&E>7T$R^XG9Fx{YemX7W13-X!nb0J1m7%@`7VZEY0Sbka17kBe`~c=|aE^~pf>QPJ z5)F#x7V)LSs0+76eq{FFOX=ZuWJCTQaV?{HMf)4Yf-?rls@+=4v-y`3+|FEhD&ydE z+viHU(SPrHdJ-YxaS^3B!d7oW25;}r>$ZcFlcW?8~7=gt8+M1?8fhMhMXL$vhjyDEA>t&|B1L; zUrP0yBH{BqZ6MEwahV-R){ArQR)!3H$RVbCPt7(aJaJWaI#PVhF)(p*RsA(FB7>f(5H3<7io>BW0YFY1H-C zFFZ7W6Xn|6)RcQGo_%ak}~Li#GLJ~xLFSU5z! zUQ~3f-|iZcM%QL#WLHwZcDwSapdGpEpWc-E@?<&j6CU%Z)16dTs>E}kh<*k3-U-#s zpQH?k9~YK>^nF0h{Eh%i^m|A*^bn_6! zQ8h{M+<_>lURJ3fsRfmzuh_riayJlYlK_;RqaRV|@hKwM83I%iE=*u_&vy+!C7 zGF%WsXlIQY8kU#U7RrDqge)1+IITnt*{q_^#jLH_iDYC~qYE;k$bI`bw(HFhnE9na zte>u296yhf9?4l>nE3&<@qCf+0QD2PBx$X$TNnxp2PH@Bed4^YdIq!B__!$Z+*dF# z$M{X+`aC|hNVI>)Qcfpt+CF0LwXf5rsMQjv<2y3R#)mtrn>aM$wjQ(Kz2v6pbTdOP z9596TC7)~TF!gvW+^rk0mIc)yiBpx2ZlcBl4MbWo}U>w_A@kz$Co+*)3lKOK!@et$!7i6Nh4oWaeTQaWkI7DS^v7%bGqf!Oqn zQ&QSUeEc_ovT0jnnNA{ZY(e!2eQ`5Vm7LlOy%m_e#?Gjkoc0a`(N^Xt_(0H=l{}c=+l==D(GL zG$y&^Q{CtWg4|OEHcrvWqPhWsOa4t?XeG<+L|$2_lna5f3w70XZMO)t_+i9%*zarK z0UU?%KJ{{@vVrgwC3XMq8aO_I*3k6|9@Bu%jgYwcCBZlj?o@LN?>-#(heht+&=3$3 zbSqo6$q9`5yqZm6`9W{#4=LQsAi+zk)3_7n%qJ?&ui^>#%A%j7-~_g#ahPzDnZ?f9 zcn(lGUn($4ys~erJkod5QdtVMo8glj3JK9*G^-;2-sQfD7_>!G2MpDMu<_`jZj*o9 z{zo6%aVL_`5F<>ZgQ^O)=?**Mf5l!#nxwCSGGg4qN6@ol^Zvw~n=*1ng%QJxB_2wc z%2Jtc!X8-AW7h1}tPPst_7#>rFq|+yLCb3DrG}h!(tlKIrT&=YDDBYTx_WFj=0v@? zBCnEMC7(Yym8$SW5@--xyimjtCwmn%W*+dk5G1>$I0f6oc(j~rmv!(`KHPH0Lqzl@ z7*%x5&d4NtZ7favThgV zWxUP!Rw$A(dKKWhTlvf&%{@COSK52R<>CCON!;sN+8%jgNs~5kEPst)d6Cm`0}W+YA?yEBIbaT37?% z(VHAol4zOj>y#ysq8*&8u`+P!*DrtX^U09G10>wfSw2$4Py1cxPo`x-p18adgn}Wu zi%?eG4tjLAbwdv+w@1%SrE#Qga-(2njADE@bh=(SHJdo@dGTQ)k>f`)>$;nhL-sJw z43eTJn|LmpVR&HrEWO`2IUcuLRoZ2xE2qFj8LGb&r{CL=1hh`QbWr;mCswB=@0t#>$qZjaBZQ0Ud;m>ZKyLr#yL#2f4v{Vtv<@%t#yP` zBNY9i_FsU+8WN(BZ;3HzUn-|f)L_|0SRk$q4LvHq?pOWd7g2aJq->XgePC*01YdqF zxA2;H9h)qOq>GR30e!1r+F{HS5&479gMq<19{av5>qf1>Ur}D_b2eQip`MmD^7ijd zuD@o*)H6ohQ36zZ8mKsGmzP}Une5t(4iN-}>$~z$r-oQ_b*uK%aQBAQzxzg)H$oTA zl%Jx&uT?iG9saKSw}aa3Wkc5CO$kdtWD#GkxQ$XUg)1Qtj&*Nzso-XylEA(Xqm5|m zhGrx0{USsTOsc1S-7FQ+Q;~B~Te8!9P;I2x^j`4{r-|)p z@$t&mKuBb~)C*?ON~Ye+w`$WQBjx42>Qg(G9h3_NTNLH}5MzZYnXr9X>r8z)BLRE? znbKi&WIm&tT49X*f*<3fX8Z~tkNk)eiN)pM;^d^mIW`6>)32B!1#12p{y*!-ftAJe zq3>kH4f@skCKPV`@_g5NVeYoRa#t0)y24oa|?YYI&i_J{+RvU~P(ZYmn zOik9`Hu7efQ|nBPD8|bM2O5%5WXl9sxr2AAi9g>ZvytYjb|o;baQATo`y3H0>M^mq ztAT{eX@zECEMvac5Pi<1zxj2Q8iQcMaE{_1z!%+bs`Kqf0QpET*bKiZPsu0+TW9}U z`llySualkL7?m2zHIaaz;W1Hy zst^luGn;v3J`$~tWK&((%Gun=xG|`wL!o)r%7>4er5Y5l> z>wgg2RXp3zpA!gICmaU&na?$OV2&%{Pq#~d{0K`OWFn$9lfi)H-h1m0%6C+CrsPpps1;X@a;Su> zFLHO`SMRpsu9yAkBNXyAm!T7w?X6{Ya%Hskfbe*LMnJ7^jT%hJd3wq8Cn6(eXhsVc zIlhI_UC(a@kz4G#{r1SB-9Q-!3@)F2Ocs89?g=z$&eV_uwjrsSNrID+r->g}z+gRZ zSGoKx$QPiKFhmSNH!U@Q?4?}~;?gi%tOpLI$mh_p8lXwlWF{yt^?H-gq5LQ2pF~+H z1WIN3DbyH9|E9bgVgE-Vmc-cBu?A>u9MBioQ! zFaq(fGrEuHS>k)g5w5!z%un*j3YmK6tn;Tx_;i7(0XDghXvkd5Sdrr)X^E(NrF^G8 zc6epQV5VkTRKEL=FOsJXKqC?CHYVj7Z>%K!5paEe?CCzYttm@MS!__Bm}yKKsS=PS z`?rAa6>#{NIX8wsjZ#)WJvF@CRDXw7r^0GpCd+&^Thtm!z;#(*Fb3cV04?K{w}k_bK$^Q@QhV2;L4foaHn_SR1(`Ly|eDB&yNc+-Y&7Ow{P?3xy)~&8<@t<&Kg6x3tWa|FWpg8&T-evgloUE0fx&^Im#&2Ff5Kn50Ll%_i(-fK z6*GW3SvR@wF%}ho11B=j3Bs`WseFraYrx2Y=ngK>dklvP49 zaX_`UYE>4&N=R=-6)JG$=ILtG^6#z48A3aYP#jHn6e7+u)P3~m%?9#&0Z4C}yUBV{ zPNa;2i~ncU@1dW{=g~ttcd-K`ed6A!%kbrnaz*^lN|-@_OJ$a1XjBijTd0Xbo^!uS=w{%70@d@15{FO3M7m3fMhYC6kL#Ye6AtT<3p(7xsX4IE*GeA z4l&Y{+m=hO!L{Cto!v7h&YZxkmSZg~);R(}7A&yoa@Yh^*CWpr}qWrS-81!yae#crqn z^rW(%EkNH)jX$7=>3_@+!L6~veMuRoS;ah*NJVI!9C*n6Q3xj)$T*km6s05aD&WP! zPzMwbLwA{mjL)8OmUCDr%H)f4$o?M%4KAK~25>4C1X#}ibfa6q3#o2)5;qkv?g|4G z^q*8zFx3^6E!p)wp1Xstn=|^2SNM*3`pV;Ze{_Js%I#}~|80)-v1Tzml-9o7&X8-Q zB9f>u$Gpe_`jhjFvlMUy87UUW$}?lozf`BQxkTfFU-#$yNz%eX{v+Q zY^(lRaoBrPRW$K@Rp_a4uCNhnGQo`4MOhcI+LJPDs zyM3eU)lXm>5!zIZVOxoM9RvUXogc`~Q-Twf<=>l@=2i7^(l4S`q|*sHNxI7qZh(u| zDFIz?sNfqQ$^$Ob0aT>H#S)(ucyi^@vcOsRkqBdG8u*fecEnid-mjdm0MNmw)lNl5 zCxR1n%<->Gsdf`ijgd!SUR#+ENT43jNFUUmDeysDt7Ka0KR>{aDXE^@A)%}rym8_> zQ)B2?-J$enQI8;4x>TK!hbaPRuYD#M%hbM}{|4f&3Ap3~dH+w37}1Lj%XDbT`hNCg z(Z#+7x@LerQqLBh(jdLo=Mzp5sH%Hw60g?#>lx41T#M#wk$&q*1w2L%XqRf3%gUBe zuChu|5SF%@QF%FcA*}ur4qvkeD8+?~7`^E*XoitafN_j!uJ^e(vb=Ntg|y`?R9XV8 z84omc&*#KqYY~-30o_%|fCK@97cQKjtO>HHZshGxtJue#+t*#xkkz z75o5?XXx^EYgEuB7i0+-t58T0Tz}{{n}CeS&mDoD(yEqBtIy{GmGNhov4w-02_OmbMVHEZbjF`g!?&UV8~rYyTIj{pd5wa9&M0Msia zdZTQOjsF7tC_&QBqE}0IG&jk0!yLc3jsIeM(_*PUK(pa_aAr->ha+~Wa zcTLiWqRqM~ml?TiWT9L(x1^bnx#Uj8=2C`-T2_YSvNBQM&GYIHcz!;w*Eyf_IiJh< zocH;>i_w41qp44eTvIj3ZQLxt3%?cP<`7k`b?pY>NcHSG7l$7)%k<5frigIx3o92O zb(zxpnuRbmwwc+WjE!P)>48$UgCVwHXfHsd9bUE_2F2o^l34QRBAO#om&ZWoWF&`L z$NTnUE%HUkNMz%98uJ7p{?_H6XVNsM0i%+a1hE?<(bbUYoP!$YTzc+wL{bCh<(i2M zByJTlBF2*qCE&#l%>;8k2}nIFBY{q?tVAbO6zs}q6G7&zXMx8;{D={^faCdnaZ+2T z?0co_VWxQR_7Xr`u&he#|89(!aNGA<;^4;>HV0FA)h_NkV?DZI;XpzB%L&}g%FP4R zGalEE(=c zxN5#xlZ%%TpOMN1@fXA81j#D=RtJs6Cfy08$xVZ<+|m()0atnhLci3JQB&!F5j95?YK?MJjDK@v7gX?} z=Y*`t!XM~Kb~v}S@*fm5@a3D)+_tWwZV}o=(pK+2Q+c++wN&zJ>+$t%%6PUgSegbP z$JF&}9$*Vn_MtOP3{HA5WnFOjwsDrB>MvstwD0AooC(hO6m;835U|4g_s(oq- zU_Rm@{@&(@!e6dpyeCM2A8sNjE%l72)YE)((!9f(ys*Ig6g|O;b>v~lJPcO;O)IHg zYr3qhCE9e9k*Q76Yj2!YkIUD#ny(Hi)sXy#wpKCoDTo;tv_`Y{3%n?kVYMHbF(O3@aQ93SWY?c4q^-U z2)(YkMcTI_CNSnK9|eF9^@D2Ml*s~f+pj60&1`#s!v_jjTMO|`cOFR%1w-FPw=oKv zah!_-6Vn*vkL*z9QWth62rVp=+s%hR9>O2OJ9g^*(aX?ZyEtmiX4)A_<3w-gWtbJ# zX0LJCok||1p!I)yl9|O0lbI_SvKDitJBAWGO7R{o87g_FNg0<0^gmFs49jn;zQRk$ z!KTHi;vr19HY+nVIW_!*vdw&hL=k4$8B0lP0dq4o((FQ9c&VpK?zx1co!&>0lAuGf3N&uhG$kQj08?#}-`W`KeDvu5|pucsK6yom#RU`h+Q?g{QE5 zP31QE?}Ys%Mee)Ri?iLinFHsg!<^pRuz`DmWyzq_!)jyt$MJV-(vFUzR zzBYRr&$x?RwW~A+)f@(7`pS;##Y~Ai0>5m~sZCk*|A!qGxbx zJPjHc6$#~4sSAX3q^ETG+fNqiu)$fWw`gYc49JixFi+r7ae*52G#%cZZS-Unha5ET zS>7vaS?0qj$+M%|c9}Z_rMfzg9(?Siog=&i>l;?0@tT8{^2OwvUjh~84L8vml8@@} zG!tovYWz-jkvi}VK0fpG8)-YefT#?dTcqaluDD9HYygF5XkK50I|6&3%{| zmcqTUY_YV#n>>##puX+E`6=&xpyFFTrJ|5Kgb0*-tGks}%bgK@z9cgBIepZ_?FuZm zGkmoRdP1*}tW>n1b2l%)%q}A)T64Qn*h&M(vQox>R0082PHf?(m4~EmEtk&`C3KG; z_t-*}1f}ruYB=Q&aJ{;6TG)k>V)TOBd#6@-tg#)=>M<;n^%ZKSi%WU~n9ZVSOFB}g zhN=!jbexaxW|7;RhK)C#4E?6lBQqT+#0hWE4PG5v$cI5qJN9_Ie>Kxh?NA-VE=m$X z+@V&$lF~KBbrT9r%*Ui1w!9l<11@$$3g@f7%LS4u_rL?3zt4hy4gnV^(3oe`G}h`0zP zl4AR#jqPZ0o60USX7XfjbjDc#)7?_@ChyC8vr`*#4@X4u3RR9lqLI|`HSi{NqIrE% zTw4(DG%>B?`^R`sW-W(cVEScYYkMEQ&0zb`K2M`>-ogJNZB1QtZ1EU*eXhV( zI6)JM)^iaAMQLZlAIb&d*Uo7gvT2m)wnk5zJslS4zrL<+yA5A5+I`}o?H9k#`|pBk z2T>h0_awdgQfWe|A7OI;VV|)_dtc3x!5@fnLV7fwxjlS z{j*+8iJIG2J)&|TqfVt8a!cIECWbvzs2~^Jzjmi_wNzJ?B*I4Dsv? zl2odoa1Lcf{M`76DSw9gW22fpsB~NFwe)|U;NLaYHTxeXSQk=S^7)dY b?yZ`bOpT_f22^@WITEeR?aZE>I)Cf`Y3n;O diff --git a/test/assets/dataset/a/a2.png b/test/assets/dataset/a/a2.png deleted file mode 100644 index b6ff2059d4c2911398caa6cf14131ed281117d1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11638 zcmeIYc{tQ>^fx{zeUd1J7F5=(W6PGMM6#EiFm@^X*qI@sBos2n4AWvsVnmT`h9t{i zM3F3GA7ft|X5o2H-|P4L>-ppP|9M>3&1J6l-0%CG`z){XIw$qEh0$@Yb6g-0=(zDM z11k`SJplw_d;T9g@X5y)H$#CxM}u!ULP4Nor&x;(l#f0Ge0U_x*xc~QG{=$S^5TvY z@$$e&!hSXmVK;&T0=xsmfPX=t8=>CrVcuRBBmKheT{JQ_zwM>qeFOx$2r@RfZWHxq zWqdT^kBLC?l>UE@)>oBiOj31Z$Hfzmal3Us_EpgDYAFYeofm6oG&H)rY%83uT*VL# zv&5UR-%GD$iE}vo&pO+ZCC*x1pxl4Un6pa!-%?JHF#i8m7Mq;$zs2oloW)vRAk%;A z|KEnS-T$3iVQwy2UmQ=|+UrRg@t?1`1ZZJGJF?YtKwa^q|x}R~#DI}5uMr#91Y5P0F5K50| zN=1?chrLRL>LfGSHdRGh(|q~u2xAFyAX?;GgY?Y? ztb4%nu%cnGw6{=4+oL+*RJb+E(m{`pw;tX#c@1e0IaQEJhBgSuvm`pv;uv4@Nk=4; z(x8PQ66TcKFg0vF9qZp`HabhE+q%PKx}txuP8hrJu3JWRM(XI~UL4M;LLjX@w7$ni zjt`OPb@=Lr*=lV7iu*6+B_KA|zU7k^lqc_+ju6k*9@;${MpEH;@Y(4_KcEc=;p9|K z(?<7wS*fFC|h_~b>SRjp?$hs4m;+$>mY@9(* zB2vU>(WT)Pvg)I=LRpMswIs}s(5!Z`?Z`XtZG>rfQTbkapPI z0Z>uL)*d5RV;dH)AyimcsH~DEM~n!a$T}QA6f?#oAF~@kA@GmeF1;o+D5dw0?V~Dv zl=CwXmpEPvA55`%^! zHW6HThXV3b!hN1sf4Xt7wN~R-Ezo-;*g~2=c$L3z`5uRZazgRr@Anm#+S(p5oxUm` ziLYtuNrW2yQpZb*1Q}kLQ2lghnM2YIacEK55in?tS&E>Q`G;_0`R@ zrC+*p0?}`KVJ_%<;B#F4{u9+=vgRBZ)(0k#tO7U&(e0T5qw|-8kvCmRczhoJ4tm5o zgB6pz|Z{7obxF24vBV9RNx&Cg6>%GMpWtV};x|`MPxvOUz@y-oZBmM)7 zo@vE2;!hlmL|#mW$j6^*J35@kUAe~DXUSY;Ne_FocJzZbbOx-VG{7(;Lc2+rHRKGeUR1 z5-lg9kT~y#tcNdGgcuT$drDxQr!%hr4{soBA}nNwFi1v^r~V75k#k*@E7qFrU}7k! zpmmQuR39s#{A*-!vx8g(7S4Hf{K3`d#0EO2h7#+{R!-t*XEVxg#NJEWDO}d>M;&=$)P~(<+sCs+16Gtef@ygBiz_lf2Is4{MxiM|O@@btjGar`eHCtg7{=(N0~#BAus9THXO1}*!+5&X->@P&CrD;kEp6|LYI{4Y#fX7>43YI=|&8^^160bpfK zSB`t@8i$M7GcBoJLy7kZb&oyDtMtc50*Zur_`!WPIeUpch2rd#x`sS>xYEbHr-q7W zogp6#6v-(DI7L(yfKq7Re&036^S7zLO9kRcjnoLUxx3wn6o2Kp$}MlFw0WguFeL9h zka*-^G|>F^Nux|FHo(>6bRo8v<4J*hUOF_HC1Q9p%J0(ZA(jC<7H=U%^K9?c!c*&j zfU~9YnR5Om9(mx*TO{|Z6{7Iyoh8Tr?5CXi3C%1%KuRnq2Yk!Ip|5&u>{Vddd#bnE zY0yf)?iWR4{TBh}(M|s_$JbCFbIBL3Onu7jL$iH9p#DB#X`y0i8Hn3XpZHm50b@0U z@q<@lT`${iL2Kb<2_yv=A+7O0M~>1-3$jX`gw|6l;8uwFfE~^%{J5GSc16kPnbp1z zmD-T4j-#$cJwHZl39wazu(0#w6c-e%uTvIpj9)c?@G#Bjc#1 za^8aXe{-YhxEMz^@}Xdz=UKWRX2j=${w4uvW}xDT;txV{l0i_$uK@;QaXmef89A!z zegCOs5>zG?o9%aLr_&60cUa@C4nma4 z63E=ZVJ!?vFTqrrF(jueR->_~nIm$T75XhtwCr#OJH0ZlE()@^;LY{x2&1v$Piv^s zjTHUTR5_P^1p~ll!rm^XWnPY_(qR#{XK7zpDASunUDKm2zG0uQvpCr^4aH@}aDDnA z3y5n@u+<-<6ZBQ1d+Z*J*4FP{&Q{kgV$6Bn(N{M{@11W7n|x`I0jA5d;+_Bj$V@65 zPbv1!R~<}@w^Ym>fC>edL1l7$DeECaW4=`%(n0lxDpkd@Onf|S&$O$v`B;6zrAGYD zEV+TX*tS1z@%Tm5HTgoQQBz>2!96^l_28SqN1KR+xtsWz4F{|qnf8{~4-PMz;83uR z40E+CiX*zou~dF{4ookZRd|cNe8Dt)4O|MhFXx|Iy9%U!6~o}4!=m0)^~W!smOf;K ztJdva8dO2oWQI>dl1VIDYjgns0!T8=@)<#CXr>?FKNYb4yErK2pta%2YV+Dg~9L4nDT{Dj;9dT4T}fpYXDCz@7iH2lw0e zw2+;3^F{>g)_0^5mIhm*!5mG>=Ltb|z!}wT_Nz_1(~tRsvRjM59qA5neY0eg6TzHw z>$4J4Iksg-sc2iD4r9SXG4Fuf8N5x)hml;r*el6v_dmbk>FaG&&%y~tiq82=|J>Ng zgb%WmnYyW7n)yAXh~d4<*@$hS(@DLjOw=^@`;Bz=jlNTUY2jK19D#<|^J@Ys*xHv2*fLdpB zzJ=lNo+5Pgk3YxoXd5fni4hpHlu0w^44Fwf6o1d zF*hxC6QaaG{*`6dXv8n=Xqon_JLnF*z6;?+>v;~UJ_>v@%*DEHUQ-fx;h6b$As#m} zKDfMJ!kAMHZa#wM`YkEPdeST=scX{x%x_K$5R`%7?pr6L?!$5K685@P;=~Szl&y-I ztte<%hu`Jub)!W5epF01 zqGdIPxrNZ4u)i3G^zHkAh74&#=4RXK#f@K9b^5@@rZyru_apy4p29_~I5b*i(;7Q;HQ zk=Z_f+kib%qba9CsqkJj2Wf4X+6MU!}A2Yo@)+4Sp=s|6f- z;F;QeY5DGYtzf&o6~#X858TskB|b84xITpW57rg|A?t`nxC%TgUt@_FFj}%9GY2Nr zJLh~$opL{8Q92k{CzgOJai7>E4CFp1@PBQR_<=gIGeatWcIusD^n4nzd&^&~yyN=t z($v50IPz-nK-pb0;dn zQP2_r0S4+S;0M(!8QW#klGdJhI%qUkyApwb$VVfCyNrhPB#ZWX&VIGEe1m&3+kh^< zOg?;_xv|q-|1Za{J^VZkuu|iJkKHfoYQk(vR(|_4l^4N|nK)m$Ts_GQCOHFmPE2QHrPt1Si6sW{tF!(qY<0Po8k#5mt@$^r-$4And z_1aK#|14w_AeV9#OI(oR^C5}asQ$P@t(2Nq<}IgM;&d9vSAX#@YxB0>V5OPnq@1ed znZUZcP9NU|LWhG$)G)V`@bI=^pUA2R^G5&)787?w_P2r94-2*eF|#Ugo&cS~m4{oQ=skqa<5yiZp>=mNkY#k$7d?gk@F&%b6FWA-M3?OfM* zug?vJm$sp3jY2#)gXVQ@dvNd+J~wa7Uv0!;Zj*BxM(jA19S4dO_E|O3v5-xYk4E1? z2(tBXIDP-m(^X>qrI&{wRxRZy9=s-;;@&t8kO%;m__KE>Sb>%43pNpG)6vt7_~n%O z$rEYc(d^xhui~=1Yi{_=PaJrS*?Y0e%B7*jsCvLu1Ys5Wn2+~KLrmcJGAm!j8O5VM^N&t61JqxS z1tIKQ8DGziyxGVvi*`#{yN2)GVPi<_a|?>UJ;bczgQXHHD?)%^dQHa7J`US|dr8jk^fG;p}fa2(!_x{aFVR0wBa(=z6 zR^)EfrI}(44^tao6%8Y}rbdoy#pxHC2{~FzFRj~+Z&z2j##KTa`X+Pw{N~?djl39k3inLbeXk

p%Gb7r`Ls;BBH#$M3AJ@z!ZW7cQ%)D=6 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 diff --git a/test/assets/dataset/a/a3.png b/test/assets/dataset/a/a3.png deleted file mode 100644 index 86cc0511536803160528c523471d2d264999f02f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11157 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 diff --git a/test/assets/dataset/b/b1.png b/test/assets/dataset/b/b1.png deleted file mode 100644 index d542ba0ff9dfe1161990207d3da94d4078e0b7d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13191 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 diff --git a/test/assets/dataset/b/b2.png b/test/assets/dataset/b/b2.png deleted file mode 100644 index 36edbf4991214368f40920f1de21c4df52e0513f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8996 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 J^5Z@?{|_moLi7Lt diff --git a/test/assets/dataset/b/b3.png b/test/assets/dataset/b/b3.png deleted file mode 100644 index b44b8719b3dc0c3066cf5d4ec9dc49c33662a504..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13672 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%0D>bVx=)G$ZYILn^sQt=SQ?({X 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 diff --git a/test/test_folder.py b/test/test_folder.py deleted file mode 100644 index 7abd815b060..00000000000 --- a/test/test_folder.py +++ /dev/null @@ -1,59 +0,0 @@ -import unittest -try: - from unittest.mock import Mock -except ImportError as e: - from mock import Mock - -import os - -from torchvision.datasets import ImageFolder - - -class Tester(unittest.TestCase): - root = 'test/assets/dataset/' - classes = ['a', 'b'] - class_a_images = [os.path.join('test/assets/dataset/a/', path) for path in ['a1.png', 'a2.png', 'a3.png']] - class_b_images = [os.path.join('test/assets/dataset/b/', path) for path in ['b1.png', 'b2.png', 'b3.png', 'b4.png']] - - def test_image_folder(self): - dataset = ImageFolder(Tester.root, loader=lambda x: x) - self.assertEqual(sorted(Tester.classes), sorted(dataset.classes)) - for cls in Tester.classes: - self.assertEqual(cls, dataset.classes[dataset.class_to_idx[cls]]) - class_a_idx = dataset.class_to_idx['a'] - class_b_idx = dataset.class_to_idx['b'] - imgs_a = [(img_path, class_a_idx)for img_path in Tester.class_a_images] - imgs_b = [(img_path, class_b_idx)for img_path in Tester.class_b_images] - imgs = sorted(imgs_a + imgs_b) - self.assertEqual(imgs, dataset.imgs) - - outputs = sorted([dataset[i] for i in range(len(dataset))]) - self.assertEqual(imgs, outputs) - - def test_transform(self): - return_value = 'test/assets/dataset/a/a1.png' - transform = Mock(return_value=return_value) - dataset = ImageFolder(Tester.root, loader=lambda x: x, transform=transform) - outputs = [dataset[i][0] for i in range(len(dataset))] - self.assertEqual([return_value] * len(outputs), outputs) - - imgs = sorted(Tester.class_a_images + Tester.class_b_images) - args = [call[0][0] for call in transform.call_args_list] - self.assertEqual(imgs, sorted(args)) - - def test_target_transform(self): - return_value = 1 - target_transform = Mock(return_value=return_value) - dataset = ImageFolder(Tester.root, loader=lambda x: x, target_transform=target_transform) - outputs = [dataset[i][1] for i in range(len(dataset))] - self.assertEqual([return_value] * len(outputs), outputs) - - class_a_idx = dataset.class_to_idx['a'] - class_b_idx = dataset.class_to_idx['b'] - targets = sorted([class_a_idx] * len(Tester.class_a_images) + - [class_b_idx] * len(Tester.class_b_images)) - args = [call[0][0] for call in target_transform.call_args_list] - self.assertEqual(targets, sorted(args)) - -if __name__ == '__main__': - unittest.main() diff --git a/torchvision/datasets/__init__.py b/torchvision/datasets/__init__.py index e2d2801216a..1cb604a79f6 100644 --- a/torchvision/datasets/__init__.py +++ b/torchvision/datasets/__init__.py @@ -1,5 +1,5 @@ from .lsun import LSUN, LSUNClass -from .folder import ImageFolder, DatasetFolder +from .folder import ImageFolder from .coco import CocoCaptions, CocoDetection from .cifar import CIFAR10, CIFAR100 from .stl10 import STL10 @@ -11,7 +11,7 @@ from .omniglot import Omniglot __all__ = ('LSUN', 'LSUNClass', - 'ImageFolder', 'DatasetFolder', 'FakeData', + 'ImageFolder', 'FakeData', 'CocoCaptions', 'CocoDetection', 'CIFAR10', 'CIFAR100', 'EMNIST', 'FashionMNIST', 'MNIST', 'STL10', 'SVHN', 'PhotoTour', 'SEMEION', diff --git a/torchvision/datasets/folder.py b/torchvision/datasets/folder.py index a6bb5742bc5..6fef78ee5ad 100644 --- a/torchvision/datasets/folder.py +++ b/torchvision/datasets/folder.py @@ -1,13 +1,14 @@ import torch.utils.data as data from PIL import Image - import os import os.path +IMG_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.ppm', '.bmp', '.pgm'] + -def has_file_allowed_extension(filename, extensions): - """Checks if a file is an allowed extension. +def is_image_file(filename): + """Checks if a file is an image. Args: filename (string): path to a file @@ -16,7 +17,7 @@ def has_file_allowed_extension(filename, extensions): bool: True if the filename ends with a known image extension """ filename_lower = filename.lower() - return any(filename_lower.endswith(ext) for ext in extensions) + return any(filename_lower.endswith(ext) for ext in IMG_EXTENSIONS) def find_classes(dir): @@ -26,7 +27,7 @@ def find_classes(dir): return classes, class_to_idx -def make_dataset(dir, class_to_idx, extensions): +def make_dataset(dir, class_to_idx): images = [] dir = os.path.expanduser(dir) for target in sorted(os.listdir(dir)): @@ -36,7 +37,7 @@ def make_dataset(dir, class_to_idx, extensions): for root, _, fnames in sorted(os.walk(d)): for fname in sorted(fnames): - if has_file_allowed_extension(fname, extensions): + if is_image_file(fname): path = os.path.join(root, fname) item = (path, class_to_idx[target]) images.append(item) @@ -44,85 +45,6 @@ def make_dataset(dir, class_to_idx, extensions): return images -class DatasetFolder(data.Dataset): - """A generic data loader where the samples are arranged in this way: :: - - root/class_x/xxx.ext - root/class_x/xxy.ext - root/class_x/xxz.ext - - root/class_y/123.ext - root/class_y/nsdf3.ext - root/class_y/asd932_.ext - - Args: - root (string): Root directory path. - loader (callable): A function to load a sample given its path. - extensions (list[string]): A list of allowed extensions. - transform (callable, optional): A function/transform that takes in - a sample and returns a transformed version. - E.g, ``transforms.RandomCrop`` for images. - target_transform (callable, optional): A function/transform that takes - in the target and transforms it. - - Attributes: - classes (list): List of the class names. - class_to_idx (dict): Dict with items (class_name, class_index). - samples (list): List of (sample path, class_index) tuples - """ - - def __init__(self, root, loader, extensions, transform=None, target_transform=None): - classes, class_to_idx = find_classes(root) - samples = make_dataset(root, class_to_idx, extensions) - if len(samples) == 0: - raise(RuntimeError("Found 0 files in subfolders of: " + root + "\n" - "Supported extensions are: " + ",".join(extensions))) - - self.root = root - self.loader = loader - self.extensions = extensions - - self.classes = classes - self.class_to_idx = class_to_idx - self.samples = samples - - self.transform = transform - self.target_transform = target_transform - - def __getitem__(self, index): - """ - Args: - index (int): Index - - Returns: - tuple: (sample, target) where target is class_index of the target class. - """ - path, target = self.samples[index] - sample = self.loader(path) - if self.transform is not None: - sample = self.transform(sample) - if self.target_transform is not None: - target = self.target_transform(target) - - return sample, target - - def __len__(self): - return len(self.samples) - - def __repr__(self): - fmt_str = 'Dataset ' + self.__class__.__name__ + '\n' - fmt_str += ' Number of datapoints: {}\n'.format(self.__len__()) - fmt_str += ' Root Location: {}\n'.format(self.root) - tmp = ' Transforms (if any): ' - fmt_str += '{0}{1}\n'.format(tmp, self.transform.__repr__().replace('\n', '\n' + ' ' * len(tmp))) - tmp = ' Target Transforms (if any): ' - fmt_str += '{0}{1}'.format(tmp, self.target_transform.__repr__().replace('\n', '\n' + ' ' * len(tmp))) - return fmt_str - - -IMG_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.ppm', '.bmp', '.pgm'] - - def pil_loader(path): # open path as file to avoid ResourceWarning (https://github.com/python-pillow/Pillow/issues/835) with open(path, 'rb') as f: @@ -147,7 +69,7 @@ def default_loader(path): return pil_loader(path) -class ImageFolder(DatasetFolder): +class ImageFolder(data.Dataset): """A generic data loader where the images are arranged in this way: :: root/dog/xxx.png @@ -171,9 +93,49 @@ class ImageFolder(DatasetFolder): class_to_idx (dict): Dict with items (class_name, class_index). imgs (list): List of (image path, class_index) tuples """ + def __init__(self, root, transform=None, target_transform=None, loader=default_loader): - super(ImageFolder, self).__init__(root, loader, IMG_EXTENSIONS, - transform=transform, - target_transform=target_transform) - self.imgs = self.samples + classes, class_to_idx = find_classes(root) + imgs = make_dataset(root, class_to_idx) + if len(imgs) == 0: + raise(RuntimeError("Found 0 images in subfolders of: " + root + "\n" + "Supported image extensions are: " + ",".join(IMG_EXTENSIONS))) + + self.root = root + self.imgs = imgs + self.classes = classes + self.class_to_idx = class_to_idx + self.transform = transform + self.target_transform = target_transform + self.loader = loader + + def __getitem__(self, index): + """ + Args: + index (int): Index + + Returns: + tuple: (image, target) where target is class_index of the target class. + """ + path, target = self.imgs[index] + img = self.loader(path) + if self.transform is not None: + img = self.transform(img) + if self.target_transform is not None: + target = self.target_transform(target) + + return img, target + + def __len__(self): + return len(self.imgs) + + def __repr__(self): + fmt_str = 'Dataset ' + self.__class__.__name__ + '\n' + fmt_str += ' Number of datapoints: {}\n'.format(self.__len__()) + fmt_str += ' Root Location: {}\n'.format(self.root) + tmp = ' Transforms (if any): ' + fmt_str += '{0}{1}\n'.format(tmp, self.transform.__repr__().replace('\n', '\n' + ' ' * len(tmp))) + tmp = ' Target Transforms (if any): ' + fmt_str += '{0}{1}'.format(tmp, self.target_transform.__repr__().replace('\n', '\n' + ' ' * len(tmp))) + return fmt_str