其他
号外!号外!现在,AIZOO开源PyTorch、TensorFlow、MXNet、Keras和Caffe五大主流深度学习框架的人脸检测模型和代码啦!先附上Github链接为敬。https://github.com/AIZOOTech/FaceMaskDetection前两天,AIZOO开源的近8000张人脸口罩数据和模型,得到了很多朋友的积极反馈,也有很多朋友留言赞赏我们的开源精神。其中一位粉丝朋友说:“公开这么多数据,你好无私啊”,一句话,瞬间让元峰标注数据的痛苦烟消云散了。但是,笔者开源的是Keras和Caffe版本,有更多的朋友发消息告诉我说,如果开源PyTorch版本就好了,毕竟,PyTorch是当今科研圈最流行的深度学习框架了。还有粉丝朋友私信元峰要TensorFlow版本。对此,元峰让明星范伟替我回答一下,请看下面小视频。对于人脸口罩检测模型和数据的基本说明,因为前文已经做了介绍,这里不再额外赘述,有需要的朋友请阅读AIZOO周三发表的《AIZOO开源人脸口罩检测数据+模型+代码+在线网页体验,通通都开源了》这篇文章。本文,我们重点介绍一下各大深度学习框架之间的转换方法,尤其是目标检测模型如何互转。1模型转换工具介绍这都2020年了,深度学习也经历了八年的蓬勃发展。这八年,深度学习可以说是人工智能领域最璀璨的一颗明星。过去的近十年,有众多的深度学习框架诞生——Torch、Theao、Caffe、TensorFlow、Keras、MXNet、PyTorch、CNTK、Chainer、Deepleaning4Java以及百度的PaddlePaddle等,可以说这些优秀的框架极大的方便了学者和工程师进行学术研究以及工业实现,也极大的促进了AI领域的发展,对此,我们应该向这些发布框架的作者们说一声致谢。不过,深度学习经过这几年的发展和沉淀,深度学习框架的头部聚集效应越来越明显。Theano和Caffe在发布1.0版本后便停止了官方更新,Chainer母公司在2019年12月宣布转向PyTorch,MXNet虽然拥有李沐等大神,背靠Amazon大山,但一直不温不火;百度的Paddle最近仍然在顽强的挣扎,疯狂的做推广,大有一副“扶我起来,我还能战”的态势。而曾经一时风头无两的TensorFlow,也在自己的作死中渐失人心(主要是1.x版本的时候API太过混乱,仅一个conv2d,在slim、tf.layers、tf.contrib、tf.nn中参数名字和风格都很不一样)。当然,因为TensoFlow对Linux、Windows、安卓、iOS、嵌入式和JavaScript都有很好的支持,所以还是工业界应用非常广泛的一个框架,我们的官网AIZOO.com里面的算法,都是使用TensorFlow.js做的。目前,学术界越来越倾向于使用小清新PyTorch了。这也是为什么元峰开源Keras和Caffe的模型后,不少学术界的朋友找我要PyTorch模型了。至于为什么当今PyTorch和TensorFlow逐渐成双雄鼎力之势,我想有一大原因是深度学习的基础构成,例如卷积、池化、BatchNorm等基本部件已经基本定型,各大框架都提供基本相同的功能,这时候,就是谁的代码风格和易用性更优,谁就更容易胜出了。基本相同的部件功能,带来一个益处就是我们使用一个框架训练好后,可以较为方便的转为其他框架的模型。元峰是用Keras训练的模型,但是可以无误差的转成了Caffe、TensorFlow、PyTorch、MXNet模型。模型转换,其实本质上就是从原模型里面读取拓扑结构和权重,使用目标框架构建同样的拓扑结构,并把权重赋值给新构建的网络,这样,使用目标框架构建的模型就可以与原模型具有一样的输出值。一个非常好用的模型转换工具是微软亚洲研究院开源的MMdnn,其基本的原理是将所有不同的框架,都转为一种叫做“中间表示”(Intermediate和Representation,简称为IR)的拓扑和权重文件,然后使用这个中间表示生成目标框架的模型。其基本原理如下图所示:对于普通的分类和分割网络,一般情况下,使用一条命令,就可以使用MMdnn都可以很方便的进行模型转换。下面是一个实例,可以说非常简单了。pip