[FFmpeg-devel] [PATCH V2 1/2] dnn/native: add native support for avg_pool

Guo, Yejun yejun.guo at intel.com
Thu Jul 30 05:02:19 EEST 2020



> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of Fu, Ting
> Sent: 2020年7月30日 9:43
> To: FFmpeg development discussions and patches <ffmpeg-devel at ffmpeg.org>
> Subject: Re: [FFmpeg-devel] [PATCH V2 1/2] dnn/native: add native support for
> avg_pool
> 
> 
> 
> > -----Original Message-----
> > From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of Ting
> > Fu
> > Sent: Wednesday, July 29, 2020 10:11 PM
> > To: ffmpeg-devel at ffmpeg.org
> > Subject: [FFmpeg-devel] [PATCH V2 1/2] dnn/native: add native support
> > for avg_pool
> >
> > Not support pooling strides in channel dimension now.
> > It can be tested with the model generated with below python script:
> >
> > import tensorflow as tf
> > import numpy as np
> > import imageio
> >
> > in_img = imageio.imread('input_odd.jpg') in_img =
> > in_img.astype(np.float32)/255.0 in_data = in_img[np.newaxis, :]
> >
> > x = tf.placeholder(tf.float32, shape=[1, None, None, 3],
> > name='dnn_in') x_pool = tf.nn.avg_pool(x, ksize=[1,2,2,1],
> > strides=[1,2,2,1], padding='SAME') #please alter the params as needed
> > y = tf.identity(x_pool, name='dnn_out')
> >
> > sess=tf.Session()
> > sess.run(tf.global_variables_initializer())
> >
> > graph_def = tf.graph_util.convert_variables_to_constants(sess,
> > sess.graph_def,
> > ['dnn_out']) tf.train.write_graph(graph_def, '.', 'image_process.pb',
> > as_text=False)
> >
> > print("image_process.pb generated, please use \
> > path_to_ffmpeg/tools/python/convert.py to generate
> > image_process.model\n")
> >
> > output = sess.run(y, feed_dict={x: in_data}) imageio.imsave("out.jpg",
> > np.squeeze(output))
> >
> > Signed-off-by: Ting Fu <ting.fu at intel.com>
> > ---
> >  libavfilter/dnn/Makefile                      |   1 +
> >  libavfilter/dnn/dnn_backend_native.h          |   2 +
> >  .../dnn/dnn_backend_native_layer_avgpool.c    | 147
> ++++++++++++++++++
> >  .../dnn/dnn_backend_native_layer_avgpool.h    |  35 +++++
> >  .../dnn/dnn_backend_native_layer_conv2d.h     |   3 +-
> >  libavfilter/dnn/dnn_backend_native_layers.c   |   2 +
> >  tools/python/convert_from_tensorflow.py       |  35 ++++-
> >  7 files changed, 222 insertions(+), 3 deletions(-)  create mode
> > 100644 libavfilter/dnn/dnn_backend_native_layer_avgpool.c
> >  create mode 100644 libavfilter/dnn/dnn_backend_native_layer_avgpool.h
> >
> > diff --git a/libavfilter/dnn/Makefile b/libavfilter/dnn/Makefile index
> > d90137ec42..e0957073ee 100644
> > --- a/libavfilter/dnn/Makefile
> > +++ b/libavfilter/dnn/Makefile
> > @@ -1,6 +1,7 @@
> >  OBJS-$(CONFIG_DNN)                           +=
> dnn/dnn_interface.o
> >  OBJS-$(CONFIG_DNN)                           +=
> dnn/dnn_backend_native.o
> >  OBJS-$(CONFIG_DNN)                           +=
> dnn/dnn_backend_native_layers.o
> > +OBJS-$(CONFIG_DNN)                           +=
> > dnn/dnn_backend_native_layer_avgpool.o
> >  OBJS-$(CONFIG_DNN)                           +=
> dnn/dnn_backend_native_layer_pad.o
> >  OBJS-$(CONFIG_DNN)                           +=
> > dnn/dnn_backend_native_layer_conv2d.o
> >  OBJS-$(CONFIG_DNN)                           +=
> > dnn/dnn_backend_native_layer_depth2space.o
> [...]
> >
> >
> > +    def dump_avg_pool_to_file(self, node, f):
> > +        assert(node.op == 'AvgPool')
> > +        self.layer_number = self.layer_number + 1
> > +        self.converted_nodes.add(node.name)
> > +        node0 = self.name_node_dict[node.input[0]]
> > +        strides = node.attr['strides']
> > +        assert(strides.list.i[1]==strides.list.i[2])
> > +        assert(strides.list.i[0]==1)
> > +        assert(strides.list.i[3]==1)
> 
> Since the tensorflow do not support pooling strides in batch dimension, and
> current do not support pooling in channel dimension, added two assert here.

thanks, and please add the comments within the code.


More information about the ffmpeg-devel mailing list