[FFmpeg-devel] [PATCH 1/7] libavfilter: Adds on the fly generation of default DNN models for tensorflow backend instead of storing binary model.

Pedro Arthur bygrandao at gmail.com
Mon Aug 6 17:53:24 EEST 2018


2018-08-03 10:11 GMT-03:00 Michael Niedermayer <michael at niedermayer.cc>:
> On Thu, Aug 02, 2018 at 09:52:42PM +0300, Sergey Lavrushkin wrote:
>> This patch provides on the fly generation of default DNN models for tensorflow backend,
>> that eliminates data duplication for model weights. Also, files with internal weights
>> were replaced with automatically generated files for models I trained. Scripts for
>> training and generating these files can be found here:
>> https://github.com/HighVoltageRocknRoll/sr
>>
>
> [...]
>> +static TF_Operation* add_conv_layers(TFModel* tf_model, const float** consts, const int64_t** consts_dims,
>> +                                     const int* consts_dims_len, const char** activations,
>> +                                     TF_Operation* input_op, int layers_num)
>> +{
>> +    int i;
>> +    TF_OperationDescription* op_desc;
>> +    TF_Operation* op;
>> +    TF_Operation* transpose_op;
>> +    TF_Output input;
>> +    int64_t strides[] = {1, 1, 1, 1};
>> +    int32_t* transpose_perm;
>> +    TF_Tensor* tensor;
>> +    int64_t transpose_perm_shape[] = {4};
>> +    char name_buffer[256];
>> +
>> +    op_desc = TF_NewOperation(tf_model->graph, "Const", "transpose_perm");
>> +    TF_SetAttrType(op_desc, "dtype", TF_INT32);
>> +    tensor = TF_AllocateTensor(TF_INT32, transpose_perm_shape, 1, 4 * sizeof(int32_t));
>> +    transpose_perm = (int32_t*)TF_TensorData(tensor);
>> +    transpose_perm[0] = 1;
>> +    transpose_perm[1] = 2;
>> +    transpose_perm[2] = 3;
>> +    transpose_perm[3] = 0;
>> +    TF_SetAttrTensor(op_desc, "value", tensor, tf_model->status);
>> +    if (TF_GetCode(tf_model->status) != TF_OK){
>> +        return NULL;
>> +    }
>> +    transpose_op = TF_FinishOperation(op_desc, tf_model->status);
>> +    if (TF_GetCode(tf_model->status) != TF_OK){
>> +        return NULL;
>> +    }
>> +
>> +    input.index = 0;
>> +    for (i = 0; i < layers_num; ++i){
>
>> +        sprintf(name_buffer, "conv_kernel%d", i);
>
> sprintf() should normally not be used as its too easy to end up
> overwriting the output.
> snprintf() is a safer alternative
>
> [...]
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> Complexity theory is the science of finding the exact solution to an
> approximation. Benchmarking OTOH is finding an approximation of the exact
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>


I may push the patch with proposed changes by tomorrow.


More information about the ffmpeg-devel mailing list