|
- Max = max(Max_Main)
- Min = min(Min_Main)
- sample = np.arange(Min, Max + 1 + 1) # [Min_V - 0.5 , Max_V + 0.5]
- sample = torch.FloatTensor(np.tile(sample, [1, c, h, w, 1])).cpu()
- lower = torch.zeros(1, c, h, w, Max - Min + 2)
- # print(len(prior_max),len(prior_min))
- for ci in range(c):
- if prior_max[ci] - prior_min[ci] == 0:
- continue
- entropy_time_start1 = time.time()
- if args.only0skip == 1:
- Max_Main[ci] = max(Datas)
- Min_Main[ci] = min(Datas)
-
- m0 = torch.distributions.normal.Normal(mean0[:, ci, :, :], scale0[:, ci, :, :])
- m1 = torch.distributions.normal.Normal(mean1[:, ci, :, :], scale1[:, ci, :, :])
- m2 = torch.distributions.normal.Normal(mean2[:, ci, :, :], scale2[:, ci, :, :])
-
- for i in range(sample.shape[4]):
- if i <= Max_Main[ci] - Min and i >= Min_Main[ci] - Min:
- lower0 = m0.cdf(sample[:, ci, :, :, i] - 0.5)
- lower1 = m1.cdf(sample[:, ci, :, :, i] - 0.5)
- lower2 = m2.cdf(sample[:, ci, :, :, i] - 0.5)
- lower[:, ci, :, :, i] = probs[:, ci, :, :, 0] * lower0 + \
- probs[:, ci, :, :, 1] * lower1 + probs[:, ci, :, :, 2] * lower2
- elif i < Min_Main[ci] - Min:
- lower[:, ci, :, :, i] = lower[:, ci, :, :, Min_Main[ci] - Min]
- else:
- lower[:, ci, :, :, i] = lower[:, ci, :, :, Max_Main[ci] - Min]
-
- precise = 16
- cdf_m = lower.data.cpu().numpy() * (
- (1 << precise) - (Max - Min + 1)) # [1, c, h, w ,Max-Min+1]
- cdf_m = cdf_m.astype(np.int32) + sample.cpu().numpy().astype(np.int32) - Min
- cdf_main = np.reshape(cdf_m, [len(Datas), -1])
-
- # Cdf[Datas - Min_V]
- Cdf_lower = list(map(lambda x, y: int(y[x - Min]), Datas, cdf_main))
- # Cdf[Datas + 1 - Min_V]
- Cdf_upper = list(map(lambda x, y: int(
- y[x - Min]), Datas, cdf_main[:, 1:]))
-
- print(Cdf_lower[2000], Cdf_upper[2000])
-
- entropy_time_start2 = time.time()
- entropy_time1 += time.time() - entropy_time_start1
- main_bin_dir = 'output_test/' + models[model_index] + '/main.bin'
- AE.encode_cdf(Cdf_lower, Cdf_upper, main_bin_dir)
- FileSizeMain = os.path.getsize(main_bin_dir)
-
- entropy_time2 += time.time() - entropy_time_start2
- del Cdf_lower, Cdf_upper
-
-
-
-
-
- with open("output_test/" + models[model_index] + "/main.bin", 'rb') as f:
- bits = f.read()
- file_object.write(bits)
-
- if USE_MULTI_HYPER:
- with open("output_test/" + models[model_index] + "/hyper_1.bin", 'rb') as f:
- bits = f.read()
- file_object.write(bits)
- with open("output_test/" + models[model_index] + "/hyper_2.bin", 'rb') as f:
- bits = f.read()
- file_object.write(bits)
- else:
- with open("output_test/hyper.bin", 'rb') as f:
- bits = f.read()
- file_object.write(bits)
|