[FFmpeg-devel] native mode in FFmpeg DNN module
Steven Liu
lq at chinaffmpeg.org
Fri May 24 18:34:58 EEST 2019
> 在 2019年5月24日,20:34,Pedro Arthur <bygrandao at gmail.com> 写道:
>
> Em qui, 23 de mai de 2019 às 00:06, Guo, Yejun <yejun.guo at intel.com> escreveu:
>>
>>
>>
>>>>>>>> Option 2)
>>>>>>>> Write c code in FFmpeg to convert tensorflow file format (format 1)
>>>> directly
>>>>>>> into memory representation (format 3), and so we controls everything in
>>>>>>> ffmpeg community. And the conversion can be extended to import more
>>>> file
>>>>>>> formats such as torch, darknet, etc. One example is that OpenCV uses
>>>> this
>>>>>>> method.
>>>>>>>>
>>>>>>>> The in memory representation (format 3) can still be current.
>>>>>>>>
>>>>>>>
>>>>>>> Option 2 would be ideal, as it does not introduce any dependency for
>>>>>>> using the native backend.
>>>>>>> Yet I'm not sure how complex implementing the tf model reader can
>>> be,
>>>>>>> If I remember correctly the student said it was not trivial at the
>>>>>>> time.
>>>>>>
>>>>>> yes, it is not easy, but I think it is worthy to do it. Here is a reference
>>>> example
>>>>>> for the complexity, see
>>>>>>
>>>>
>>> https://github.com/opencv/opencv/blob/master/modules/dnn/src/tensorflow/
>>>>>> tf_importer.cpp.
>>>>>>
>>>>>>>
>>>>>>> Is the tf model file stable? if not it will be a maintenance burden to
>>>>>>> keep it working whenever tf releases a new version. This point makes
>>>>>>> me think having control over our file format is good.
>>>>>>
>>>>>> imho, this issue is always there, no matter which method used, unless our
>>>>>> format could be exported by tensorflow (it has little possibility).
>>>>>>
>>>>>> Whenever tf releases a new version with a new file format, we still have
>>> to
>>>>>> change the python script in phase 1 (convert tf file model to our format)
>>>> which
>>>>>> is even an external dependency at
>>>>>> https://github.com/HighVoltageRocknRoll/sr,
>>>>>>
>>>>>> As from effort perspective, the current implementation is better since
>>>> python
>>>>>> script is simpler. But I think we are still worth implementing option 2 as
>>> the
>>>>>> ideal technical direction.
>>>>>
>>>>> I checked a bit more about https://github.com/HighVoltageRocknRoll/sr, it
>>> is
>>>> actually
>>>>> not an converter (from tf model to native model), but hard code for given
>>>> models.
>>>>> And the native model is not exactly the same as tf model, it even changes
>>> the
>>>> behavior
>>>>> of pad parameter of conv layer.
>>>>>
>>>>> If community is open to option 2, I'll try it.
>>>>>
>>>> Option 2 is fine for me.
>>>
>>> that's great, :)
>>
>> looks that option 2 is a bit complex, TF model file is in protocol buffers (protobuf) format and not easy to parse it with simple c code.
>>
>> Since there is no official c support for protobuf, let's first image how the work can be done via official c++ support.
>>
>> 1. get protobuf compiler protoc, .h header files and .so library files (download or build from https://github.com/protocolbuffers/protobuf/tree/master/src).
>> 2. get tensorflow model's .proto files from https://github.com/tensorflow/tensorflow/tree/master/tensorflow/core/framework.
>> 3. generate .cc/.h files from .proto files (see step 2) via protoc (see step 1).
>> 4. let the generated .cc/.h files be part of ffmpeg source tree, and build with protobuf header/library files.
>> 5. at run time, the protobuf libraries are invoked. It means that the system should have installed protobuf dev package.
>>
>> furthermore, there is a compatible problem between the protobuf compiler, header files and library files.
>> So, as a practice to fix it, the method is to make the protobuf source code be part of ffmpeg source tree. (it is a common practice, so we can many other projects contain the protobuf source code).
>>
>> I guess the above method is not acceptable in ffmpeg. I would be glad to continue if the community embrace this change. :)
> Indeed I think it is not acceptable.
>
>>
>> While the current implementation has external dependency, my new suggestion is:
>> - add a python script under .../libavfilter/dnn/ (all other dnn source files will be also moved here later), so ffmpeg has the full control on it.
> I'm not sure about the policy on putting secondary scripts with the
> main code, but another option is to create a repo controlled by ffmpeg
> maybe?
> I think this option would also help GSoC students that work with dnn,
> so they don't have to depend on previous students maintaining
> independent repositories.
Yes, I agreed with you.
I think this is a better way.
maintaining the repositories at one repo controlled by ffmpeg.
>
>> - it is a script to convert tensorflow model file into native model file. (other formats such as caffe, torch can also be supported later if needed)
>>
>> thanks.
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
Thanks
Steven
More information about the ffmpeg-devel
mailing list