From 675cd8567e8ba0643e8c63d60324ac84b5b1f218 Mon Sep 17 00:00:00 2001 From: c Date: Thu, 19 Dec 2019 15:20:47 +0800 Subject: [PATCH] Refine kernal Random to w*h*16 kinds possiable. Donot use Cpu any more. --- FilterEvaluator/Evaluator.py | 1 - FilterEvaluator/EvaluatorUnsuper.py | 134 ++++++++------------ FilterEvaluator/bestweightEntropySearch.npy | Bin 416 -> 416 bytes FilterEvaluator/checkpointEntropySearch.pkl | Bin 1836 -> 1836 bytes 4 files changed, 56 insertions(+), 79 deletions(-) diff --git a/FilterEvaluator/Evaluator.py b/FilterEvaluator/Evaluator.py index 937b9bd..bd13e97 100644 --- a/FilterEvaluator/Evaluator.py +++ b/FilterEvaluator/Evaluator.py @@ -16,7 +16,6 @@ import random import cv2 - CurrentPath = os.path.split(os.path.realpath(__file__))[0]+"/" print("Current Path :" + CurrentPath) diff --git a/FilterEvaluator/EvaluatorUnsuper.py b/FilterEvaluator/EvaluatorUnsuper.py index 608a878..4cd111d 100644 --- a/FilterEvaluator/EvaluatorUnsuper.py +++ b/FilterEvaluator/EvaluatorUnsuper.py @@ -16,6 +16,7 @@ import random import cv2 from tqdm import tqdm import threading +from itertools import combinations CurrentPath = os.path.split(os.path.realpath(__file__))[0]+"/" @@ -26,6 +27,19 @@ import Model as Model from tools import utils, Train, Loader + + + + +# iterable = combinations(range(72), 4) +# count = iterable.count() +# pool = tuple(iterable) +# n = len(pool) +# indices = sorted(random.sample(range(n), 2)) +# fdafda = tuple(pool[i] for i in indices) + + + def GetScore(netmodel,layer,SearchLayer,DataSet): netmodel.eval() sample = utils.SetDevice(torch.empty((SearchLayer.out_channels,0))) @@ -184,10 +198,12 @@ def UnsuperLearnFindBestWeight(netmodel, layer, weight, dataloader, databatchs=1 # search best weight from random data -def UnsuperLearnSearchBestWeight(netmodel, layer, dataloader, databatchs=128, stepsize=1000, interation=1000): +# Test total sample size = stepsize * stepsize * interation +# Random kernel number = in_channels * kernel_size[0] * kernel_size[1] * 16 +def UnsuperLearnSearchBestWeight(netmodel, layer, dataloader, databatchs=128, stepsize=20, interation=1000): interationbar = tqdm(total=interation) forwardlayer = layer -1 - + samplesize = stepsize*stepsize netmodel.eval() tl = netmodel.features[layer] outchannels = tl.out_channels @@ -211,93 +227,55 @@ def UnsuperLearnSearchBestWeight(netmodel, layer, dataloader, databatchs=128, st for i in range(outchannels): shift.append(1<0: - bitted = bittedset.pop() - hasdata = 1 - bittedLock.release() - if hasdata > 0: - entropys = [] - for i in range(len(indexs)): - histced = bitted[:,i].histc(256,0,255).type(torch.float32) - histced = histced[histced>0] - histced = histced/histced.sum() - entropy = (histced.log2()*histced).sum() - entropys.append(entropy.numpy()) - argmin = np.argmin(entropys) - - bestLock.acquire() - if entropys[argmin] < bestentropy[0]: - bestweight = newweight[indexs[argmin]] - bestentropy[0] = entropys[argmin] - print("finded better entropy") - bestLock.release() for j in range(interation): - newweightshape = list(newlayer.weight.data.shape) - newweightshape[0] = stepsize - newweight = np.random.uniform(-1.0,1.0,newweightshape).astype("float32") - newweight = newweight.reshape((-1,newweightshape[-1]*newweightshape[-2])) - newweight = np.swapaxes(newweight,0,1)-np.mean(newweight,-1) - newweight = np.swapaxes(newweight,0,1).reshape(newweightshape) - - newlayer.weight.data=utils.SetDevice(torch.from_numpy(newweight)) - outputs = newlayer(datasnetout).transpose(0,1) - samplesize = stepsize*stepsize - indexs = np.random.randint(0,stepsize,samplesize*outchannels).reshape(samplesize,-1) - # 1000 8 4096 5 5 - outputs = outputs[indexs] - # 102400 1000 8 - reshaped = outputs.reshape(samplesize, outchannels, -1).permute(2, 0, 1) - # 1000 8 + # 400 8 4096 5 5 + output = outputs[indexs[j]] + # 102400 400 8 + reshaped = output.reshape(samplesize, outchannels, -1).permute(2, 0, 1) + # 400 8 meaned = reshaped.mean(0) - # 102400 1000 - bitted = ((reshaped > meaned)* shift).sum(2).type(torch.float32).detach().cpu() + # 102400 400 + # bitted = ((reshaped > meaned)* shift).sum(2).type(torch.float32).detach().cpu() + bitted = ((reshaped > meaned)* shift).sum(2).type(torch.float32) - bittedLock.acquire() - bittedset.append(bitted) - bittedLock.release() - threadcpu = CPU() - threadcpu.start() - - # entropys = [] - # for i in range(len(indexs)): - # histced = bitted[:,i].histc(256,0,255).type(torch.float32) - # histced = histced[histced>0] - # histced = histced/histced.sum() - # entropy = (histced.log2()*histced).sum() - # entropys.append(entropy.detach().cpu().numpy()) - - # argmin = np.argmin(entropys) - # if entropys[argmin] < bestentropy: - # bestweight = newweight[indexs[argmin]] - # bestentropy = entropys[argmin] - + entropys = [] + for i in range(samplesize): + histced = bitted[:,i].histc(256,0,255).type(torch.float32) + histced = histced[histced>0] + histced = histced/histced.sum() + entropy = (histced.log2()*histced).sum() + entropys.append(entropy.detach().cpu().numpy()) + argmin = np.argmin(entropys) + if entropys[argmin] < bestentropy: + bestweight = newweight[indexs[j][argmin]] + bestentropy = entropys[argmin] interationbar.update(1) - interationbar.set_description("left:"+str(len(bittedset))) - - while bittedset: - time.sleep(100) - + interationbar.set_description("entropy:"+str(bestentropy)) interationbar.close() return bestweight - - def SetModelConvWeight(model, layer, weight): w = utils.SetDevice(torch.from_numpy(weight)) model.features[layer].weight.data = w diff --git a/FilterEvaluator/bestweightEntropySearch.npy b/FilterEvaluator/bestweightEntropySearch.npy index 5f64aa961998aca9c5e662970679899674b7125a..c9e7d788827196874fd5107fb73e37749004474b 100644 GIT binary patch delta 297 zcmV+^0oMMY1E2$tfPcsi*FM49$3DWsx4y)q*}bq@n!Vzs4ZqBHE53N)gFi7-6u&Ar zyS^d2D?UJiwZ6pj5kI5}SU)o3&Ay=7y1u&rt3Kdj+rDPIJ3g}1A3n1`Y(KgT^uBII z_&&DIvc8;RRX&|h8^6Ti1;30jJ-jhc*gf+mfj$})k-i(tPk%pI8&;)uus}Nl+TK1W-*P^!W~)A0 z^s~N@3<$kgrx?Hc4zgTDA9n(LNqFK|j&tAHOOP4L{D5g};&}AwCG9n!Yf7f4ny_r#`IU89!<| zMZfuHeZF!zmpzVLl0HyEMLiO>9zQ-QM84i*20t9F?Y&`WFn_2Z#r(doioHAm z-u*s$^9()}kTbtaekVV2)#E-I<&i#{RW!fQLr=dxRu4Z->j*yV$z(s;y8w0wyn#RH*ag2ay$`;Sk#|38sEods vR#m@Odn~_*Eh51_6XwmnwE|DSDgZV=3yw=Zgjr)gg~brRBKj-8lw@!}_;-t5 diff --git a/FilterEvaluator/checkpointEntropySearch.pkl b/FilterEvaluator/checkpointEntropySearch.pkl index dbcdf121302977804f1ac98002d4bb6a7b564c49..a104d5b3fcd419fc9089a1e794d7b699273e7930 100644 GIT binary patch delta 1062 zcmX|-drXsO7{yy*GWoCb#mhej#i zI#?zT4GNJWYo!Cjik)CMA_AX?r8IY! z7kq2;5nQ(($CMH&8L^{S^v7DLdMcwuKWY!r-1ME4H)kX>njHKk=u>!Lt_DfeJSz$I zfGT+`T%B+Q(dvCvZ#$3WBpvyWvw$}rN%|mwYEF4WR$T-;;%G&d*A`IQ>2%PioKg4B zI)U?wl~f?;Ld!4{adFmB&-ZE|d{rgs&Pc%Pg|;-lHVv3(4u{i)iCOGwaV>pk}j>X1=Vz-iT5vYS)8U@h;4+8N^8E&%od37Kwbp zK-ju$)!)AzqZ6^IxcOr9t@9GG_AkQYMZ;w5 zP8*7aJILu6vC8CXLW8m#8)AFZf({8OJXVRlt18f2@DFYpwIuCrJXKvl9w`XAtIj{# zh3zY+l)BzREnYJ#*eM4kx+e;agQYB{xW8ai#XRC8RIxo7LJY5LQny!4vSor6;+}S& zmC8oR(MzK!Q`}Sg9;hSf23Nf7n}NlvOGs90o9eF(lgM1$joUNF)CpxzFn2heSlZR7 zi{0u;zE_0$Y2qf57_k>i=TBmcpLU83yWwvv=rFUnvDZ;D8Hn^$BDrr7MLex4$PdPI z_~h#qn|3E*jxL-uP{7D%hhU@kX6SeAq0jG2xbK&(V=}9+eFb{gGa#SV za9NFEDvQBk@OhXH7nAEjGt*4)#4{BrK4qdOP>oe73_YzMKY2eV~E2cNdAuZ05*tGP$FWn6dnH_VnUGqoz& G#{368q}<8? delta 1062 zcmX|$4iN=R3WNYzSdOLreP19!0v#9)Pyz=PMX@oU)FGi|<3_|~ zIa4A8DoGEmTR9DDx!JkLCTJoBjZRC+BUzP3c{ z;p*xk78gqRCxy;#E)rLl!g~HGEq9UFyreF0ZQ+)*N#R_%HfWM%?{`G);}+5q~kx z?Vl!Jd7Z-TttUtn?+$q&{SLhk=5%ykt!wu?J5P9JKX(Ye&O)(d4^E7Hgof)!NOD#h zrmd!v1K%b}=eLZZs^u6uFBM~>ZUtHD7-Y+O{$vdrSquw`CRH-b#^j0j(d>pUJF6*V zwR);?$x(w_q8o_MwHR!kDJ3BS2R8C_8{X0+u};^L$&tZ9Op%mhd~^*q7?zU1Oeduk z@**sEs*oD#b&(G)K1Sp20@lSo4I^F+#fy$HM&8a#9nr!i)ZJW0N`vI^6!{>Fw<^Ji zHXV34aFQx#;^2H=3|&Yt03GW@NDXUZi~gyhyu?r0%3EvMlI1waJS3%cXBz0lPjYBh zT!BqH%Aj}gOYpj`puK+-0 z(!TM%)YHrwA1eZ>o3aL+jAc4BGN~Jt`%=KBHJd)E_JnV8wnC>#J3IZ%jvB06C3Epk zbaZ?jxo7nS?zpiQ!%U)JTl#)F`^bk@`Y|NFxRsPl*;4;VUs$nvL0+G;*TSC}dZNde z-%q1U)|1pK-yC)}`*2}*47ibdN>X)u0cvG_0o)^h7dW#z0I{*dVCn9|3{P5d_68f6 zfuamfY4av%U%gD7Q)H}%s18)WY-ZxT{J7=V6q+b0CHav`2=VnJ8(S?Iu-iq|M}^GR z#(6w^!kKHW7t!3F721-EQoec>K3miU6NM`m^tmmQcz*)SrwSnXN~o9{dM}uRFnwn4 zoHqQ{8^es_VQw~a0Ed3CfXrNbXd5