Skip to content
Snippets Groups Projects
Commit ce716773 authored by Vojtech Moravec's avatar Vojtech Moravec
Browse files

Caching calculated quantization values

parent 606c6f3d
No related branches found
No related tags found
No related merge requests found
package bdv.server; package bdv.server;
import compression.U16;
import compression.quantization.QuantizationValueCache;
import compression.quantization.scalar.LloydMaxU16ScalarQuantization; import compression.quantization.scalar.LloydMaxU16ScalarQuantization;
import compression.quantization.scalar.ScalarQuantizer;
import mpicbg.spim.data.SpimDataException; import mpicbg.spim.data.SpimDataException;
import org.apache.commons.cli.*; import org.apache.commons.cli.*;
...@@ -16,6 +19,7 @@ import org.eclipse.jetty.server.handler.StatisticsHandler; ...@@ -16,6 +19,7 @@ import org.eclipse.jetty.server.handler.StatisticsHandler;
import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.thread.QueuedThreadPool; import org.eclipse.jetty.util.thread.QueuedThreadPool;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
...@@ -55,7 +59,7 @@ import java.util.Map.Entry; ...@@ -55,7 +59,7 @@ import java.util.Map.Entry;
public class BigDataServer { public class BigDataServer {
private static final org.eclipse.jetty.util.log.Logger LOG = Log.getLogger(BigDataServer.class); private static final org.eclipse.jetty.util.log.Logger LOG = Log.getLogger(BigDataServer.class);
private static LloydMaxU16ScalarQuantization quantizer; private static ScalarQuantizer quantizer;
static Parameters getDefaultParameters() { static Parameters getDefaultParameters() {
final int port = 8080; final int port = 8080;
...@@ -96,8 +100,24 @@ public class BigDataServer { ...@@ -96,8 +100,24 @@ public class BigDataServer {
if (compParams.shouldCompressData() || compParams.renderDifference()) { if (compParams.shouldCompressData() || compParams.renderDifference()) {
//TODO(Moravec): Replace LloydMaxU16ScalarQuantization with some ICompressor. //TODO(Moravec): Replace LloydMaxU16ScalarQuantization with some ICompressor.
quantizer = new LloydMaxU16ScalarQuantization(compParams.getTrainFile(), compParams.getBitTarget()); QuantizationValueCache quantizationCache = new QuantizationValueCache("D:\\tmp\\bdv_cache");
quantizer.train(true); final int quantizationValueCount = (int) Math.pow(2, compParams.getBitTarget());
final String trainFilename = new File(compParams.getTrainFile()).getName();
if (quantizationCache.areQuantizationValueCached(trainFilename, quantizationValueCount)) {
LOG.info("Found cached quantization values...");
final int[] centroids = quantizationCache.readCachedValues(trainFilename, quantizationValueCount);
assert (centroids.length == quantizationValueCount) : "Cache is corrupted";
quantizer = new ScalarQuantizer(U16.Min, U16.Max, centroids);
LOG.info("Initialized quantizer...");
} else {
LOG.info("Calculating quantization values...");
LloydMaxU16ScalarQuantization lloydMax = new LloydMaxU16ScalarQuantization(compParams.getTrainFile(), compParams.getBitTarget());
lloydMax.train(false);
quantizationCache.saveQuantizationValue(trainFilename, lloydMax.getCentroids());
LOG.info("Saving quantization values...");
quantizer = new ScalarQuantizer(U16.Min, U16.Max, lloydMax.getCentroids());
}
} }
...@@ -196,7 +216,7 @@ public class BigDataServer { ...@@ -196,7 +216,7 @@ public class BigDataServer {
@SuppressWarnings("static-access") @SuppressWarnings("static-access")
static private Parameters processOptions(final String[] args, final Parameters defaultParameters) throws IOException { static private Parameters processOptions(final String[] args, final Parameters defaultParameters) throws IOException {
final String BIT_TARGET = "bits"; final String BIT_TARGET = "bits";
final String ENABLE_COMPRESSION = "compression"; final String ENABLE_COMPRESSION = "compress";
final String ENABLE_COMPRESSION_DIFF = "diff"; final String ENABLE_COMPRESSION_DIFF = "diff";
final String DUMP_FILE = "dump"; final String DUMP_FILE = "dump";
final String TRAIN_FILE = "train"; final String TRAIN_FILE = "train";
......
...@@ -10,7 +10,7 @@ import javax.imageio.ImageIO; ...@@ -10,7 +10,7 @@ import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import compression.quantization.scalar.LloydMaxU16ScalarQuantization; import compression.quantization.scalar.ScalarQuantizer;
import compression.utilities.Utils; import compression.utilities.Utils;
import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.ContextHandler; import org.eclipse.jetty.server.handler.ContextHandler;
...@@ -91,11 +91,11 @@ public class CellHandler extends ContextHandler { ...@@ -91,11 +91,11 @@ public class CellHandler extends ContextHandler {
*/ */
private final String thumbnailFilename; private final String thumbnailFilename;
final CustomCompressionParameters compressionParams; final CustomCompressionParameters compressionParams;
private LloydMaxU16ScalarQuantization quantizer; private ScalarQuantizer quantizer;
public CellHandler(final String baseUrl, final String xmlFilename, final String datasetName, final String thumbnailsDirectory, public CellHandler(final String baseUrl, final String xmlFilename, final String datasetName, final String thumbnailsDirectory,
final CustomCompressionParameters compressionParams, final CustomCompressionParameters compressionParams,
final LloydMaxU16ScalarQuantization quantizer) throws SpimDataException, IOException { final ScalarQuantizer quantizer) throws SpimDataException, IOException {
final XmlIoSpimDataMinimal io = new XmlIoSpimDataMinimal(); final XmlIoSpimDataMinimal io = new XmlIoSpimDataMinimal();
final SpimDataMinimal spimData = io.load(xmlFilename); final SpimDataMinimal spimData = io.load(xmlFilename);
...@@ -172,9 +172,9 @@ public class CellHandler extends ContextHandler { ...@@ -172,9 +172,9 @@ public class CellHandler extends ContextHandler {
for (int i = 0; i < data.length; i++) { for (int i = 0; i < data.length; i++) {
// Original - Compressed // Original - Compressed
data[i] = Utils.u16BitsToShort(data[i]-compressedData[i]); //data[i] = Utils.u16BitsToShort(data[i]-compressedData[i]);
// Compressed - Original // Compressed - Original
//data[i] = Utils.u16BitsToShort(compressedData[i]-data[i]); data[i] = Utils.u16BitsToShort(compressedData[i]-data[i]);
} }
//LOG.warn("Not yet implemented."); //LOG.warn("Not yet implemented.");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment