一、Github的license
1、开源软件的License,一般是授权用户使用、拷贝、修改和再发布的合法权利及应当遵守的约定,同时包含作者的免责声明和使用自担责声明。
2、使用合适的开源许可证可以给开发者/使用者避免一些不必要的麻烦事情。
3、我还是不明白我再这里写TNN的总结,会不会侵权,知道的谢谢留言。
开源软件为什么要有授权
为什么开源项目要选择License
二、如何进行模型转换
1、目前TNN仅支持CNN,支持主流的模型文件格式,包括ONNX、PyTorch、Tensorflow以及Caffe等。
2、模型转换有三种:
(1)方法一分两步:比如Caffe先通过脚本caffe2onnx,转成ONNX模型,再通过脚本onnx2tnn,转换成TNN模型。脚本位置分别在
TNN/tools/caffe2onnx/caffe2onnx.py和TNN/tools/convert2tnn/caffe_converter/caffe2tnn.py
注意的是:执行caffe2onnx.py只需补充待转换模型位置等参数即可;执行caffe2tnn.py需要先编译,具体环境搭建以及编译步骤见TNN/doc/cn/usr/onnx2tnn.md;同时wIndows系统不建议尝试。
(2)方法二一步走:手动安装依赖工具和编译工具,使用conver2tnn转换工具,其实和方法一差不多。
(3)方法三也是一步走:通过docker image的方式使用convert2tnn转换工具,重点说一下这种方式
基于Docker的模型转换方式
TNN/doc/cn/user/convert.md之Convert2tnn Docker(推荐)这里步骤和参数说的很清楚
具体终端命令如下:
docker pull turandotkay/tnn-convert
docker images
docker tag turandotkay/tnn-convert:latest tnn-convert:latest
docker rmi turandotkay/tnn-convert:latest
docker images
#convert TF
docker run --volume=$(pwd):/workspace -it tnn-convert:latest python3 ./converter.py tf2tnn \
-tp /workspace/test.pb \
-in "input0[1,32,32,3];input1[1,32,32,3]" \
-on output0 \
-v v2.0 \
-optimize \
-align \
-input_file /workspace/in.txt \
-ref_file /workspace/ref.txt
# convert onnx
docker run --volume=$(pwd):/workspace -it tnn-convert:latest python3 ./converter.py onnx2tnn \
/workspace/mobilenetv3-small-c7eb32fe.onnx \
-optimize \
-v v3.0 \
-align \
-input_file /workspace/in.txt \
-ref_file /workspace/ref.txt
# convert caffe
docker run --volume=$(pwd):/workspace -it tnn-convert:latest python3 ./converter.py caffe2tnn \
/workspace/squeezenet.prototxt \
/workspace/squeezenet.caffemodel \
-optimize \
-v v1.0 \
-align \
-input_file /workspace/in.txt \
-ref_file /workspace/ref.txt
对docker不熟悉的小伙伴可以查一下docker的常用命令,这里备注一下相关的:
#列出本地镜像
docker images
#列出本地所有镜像(含中间映像层,默认情况下,过滤掉中间映像层)
docker images -a
#列出本地镜像中REPOSITORY为ubuntu的镜像列表
docker images ubuntu
#列出所有在运行的容器信息
docker ps
#列出最近创建的5个容器信息
docker ps -n 5
#列出所有创建的容器
#docker ps -a
#使用镜像nginx:latest以交互模式启动一个容器,并在容器内执行/bin/bash命令
docker run -it nginx:latest /bin/bash
#-i:以交互模型运行容器。-t:为容器重新分配一个伪输入终端。两个通常同时使用
#--name="nginx-lb":为容器指定一个名称
# -p:指定端口映射,格式为:主机端口:容器端口
#-v/--volume:绑定一个卷,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径
#使用镜像nginx:lates,以后台模式启动一个容器,将容器的80端口映射到主机的80端口,主机的目录/data映射到容器的/data
#被挂载之后的容器地址将会存在挂载的挂载内容
docker run -p 80:80 -v /data:/data -d nginx:latest
#删除指定ID的容器
docker rm 6655086fbaff 67b710cbe462
下面是我执行的命令
docker run --name="model2tnn3" --volume=/data02/lhh/models/:/workspace -p 50009:22 -it tnn-convert:latest
python3 ./converter.py tf2tnn \
-tp /workspace/tfmodel/mobilenet_v1_1.0_224_frozen.pb \
-in "input0[1,224,224,3];input1[1,224,224,3]" \
-on output0 \
-v v2.0 \
-optimize \
-align \
-input_file /workspace/in.txt \
-ref_file /workspace/ref.txt
python3 ./converter.py caffe2tnn \
/workspace/caffemodel/slim-320.prot