Browse Source

ncnnoptimize save fp16 storage weight

tags/20190611
nihuini 7 years ago
parent
commit
81fda4d6d7
1 changed files with 38 additions and 3 deletions
  1. +38
    -3
      tools/ncnnoptimize.cpp

+ 38
- 3
tools/ncnnoptimize.cpp View File

@@ -71,6 +71,10 @@

class NetOptimize : public ncnn::Net
{
public:
// 0=fp32 1=fp16
int storage_type;

public:
int fuse_batchnorm_scale();
int fuse_convolution_batchnorm();
@@ -1156,14 +1160,31 @@ int NetOptimize::fprintf_param_float_array(int id, const ncnn::Mat& m, FILE* pp)

int NetOptimize::fwrite_weight_tag(int tag, FILE* bp)
{
fwrite(&tag, sizeof(int), 1, bp);
if (storage_type == 1 && tag == 0)
{
tag = 0x01306B47; // fp16 magic
fwrite(&tag, sizeof(int), 1, bp);
}
else
{
fwrite(&tag, sizeof(int), 1, bp);
}
return 0;
}

int NetOptimize::fwrite_weight_data(const ncnn::Mat& data, FILE* bp)
{
ncnn::Mat data_flattened = data.reshape(data.w * data.h * data.c);
fwrite(data_flattened.data, data_flattened.elemsize, data_flattened.w, bp);
if (storage_type == 1)
{
ncnn::Mat data_flattened_fp16;
ncnn::cast_float32_to_float16(data_flattened, data_flattened_fp16);
fwrite(data_flattened_fp16.data, data_flattened_fp16.elemsize, data_flattened_fp16.w, bp);
}
else
{
fwrite(data_flattened.data, data_flattened.elemsize, data_flattened.w, bp);
}
return 0;
}

@@ -1780,7 +1801,11 @@ int NetOptimize::save(const char* parampath, const char* binpath)

int main(int argc, char** argv)
{
// in in out out 65535
if (argc != 6)
{
fprintf(stderr, "usage: %s [inparam] [inbin] [outparam] [outbin] [flag]\n", argv[0]);
return -1;
}

const char* inparam = argv[1];
const char* inbin = argv[2];
@@ -1789,6 +1814,16 @@ int main(int argc, char** argv)
int flag = atoi(argv[5]);

NetOptimize optimizer;

if (flag == 65536)
{
optimizer.storage_type = 1;
}
else
{
optimizer.storage_type = 0;
}

optimizer.load_param(inparam);
optimizer.load_model(inbin);



Loading…
Cancel
Save