Skip to content

Commit 203e901

Browse files
author
Vernadsky Daniil
committed
release S-2021.09
1 parent 8bd2c92 commit 203e901

13 files changed

+442
-6
lines changed

caffe_models/evgen_util.bash

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
# Utilities to be sourced in another script
2+
3+
if [ -z "$name" ] ; then
4+
name="test"
5+
fi
6+
7+
if [[ -z "$EV_CNNSDK_HOME" || ! -d $EV_CNNSDK_HOME ]] ; then
8+
echo "EV_CNNSDK_HOME not correctly set in the environment"
9+
exit 1
10+
fi
11+
12+
evgen=${EV_CNNSDK_HOME}/evgencnn/scripts/evgencnn
13+
blobr=${EV_CNNSDK_HOME}/install/bin/blobreader
14+
15+
if [ ! -f $evgen ] ; then
16+
echo "evgencnn executable not found : $evgen"
17+
exit 1
18+
fi
19+
20+
# Secret evgencnn options : wof & vof
21+
export __SAVER=1
22+
# More verbose evgencnn output
23+
export show_classify=1
24+
25+
if [ -f "${name}.opts" ] ; then
26+
base_opts=$(<${name}.opts)
27+
base_opts=$(echo $base_opts)
28+
echo "Using ${name}.opts"
29+
fi
30+
31+
function runcmd()
32+
{
33+
echo "$@"
34+
eval "$@"
35+
if [ $? -ne 0 ] ; then
36+
echo "Failed to run command"
37+
exit 1
38+
fi
39+
}
40+
41+
# Verification info loaded from bin files
42+
function wr_bld_vof()
43+
{
44+
local out=$1
45+
local dir=$(dirname ${out})
46+
if [ ! -d $dir ] ; then
47+
echo "Dir nto found : $dir"
48+
exit 2
49+
fi
50+
cat <<- EOF > $out
51+
#!/bin/bash -ex
52+
g++ -O2 -DWEIGHTS_IN_FILE -DVERIFY_IN_FILE \\
53+
-I ./include \\
54+
code/${name}_impl.cc \\
55+
verify/${name}_verify.cc \\
56+
-o ${name}.exe
57+
EOF
58+
chmod u+x $out
59+
echo "Created $out"
60+
pushd $dir
61+
runcmd ./$(basename ${out})
62+
popd
63+
}
64+
65+
# Verification info loaded from bin files + dump intermediate values
66+
function wr_bld_vof_dump()
67+
{
68+
local out=$1
69+
cat <<- EOF > $out
70+
#!/bin/bash -ex
71+
g++ -O2 -DWEIGHTS_IN_FILE -DVERIFY_IN_FILE -DCNN_NATIVE_VERIFY \\
72+
-I ./include -I \${EV_CNNSDK_HOME}/include \\
73+
code/${name}_impl.cc \\
74+
verify/${name}_verify.c \\
75+
-o ${name}_dump.exe
76+
EOF
77+
chmod u+x $out
78+
echo "Created $out"
79+
}
80+
81+
# Statically link all the input data (found in .c files).
82+
# This leads to slow compilation and slow startup. Unfortunatelly it is
83+
# the default mode of operation for the CNN tools.
84+
function wr_bld_static()
85+
{
86+
local out=$1
87+
cat <<- EOF > $out
88+
#!/bin/bash -ex
89+
# Argv 1 : the name of the C file containing the input image
90+
input_img=\${1:-no_input_specified}
91+
g++ -O2 -DCNN_NATIVE_VERIFY \\
92+
-I ./include -I \${EV_CNNSDK_HOME}/include \\
93+
code/${name}_impl.cc \\
94+
weights/${name}_filters.c \\
95+
verify/${name}_verify.c \\
96+
\${input_img} \\
97+
-o ${name}_static.exe
98+
EOF
99+
chmod u+x $out
100+
echo "Created $out"
101+
}
102+
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#!/usr/bin/env python
2+
3+
import os
4+
#os.environ['GLOG_minloglevel'] = '2'
5+
6+
import numpy as np
7+
import caffe
8+
9+
netPatched = caffe.Net('mtcnn-relu.prototxt', caffe.TEST)
10+
11+
def convertDet1():
12+
net = caffe.Net('det1.prototxt', 'det1.caffemodel', caffe.TEST)
13+
14+
for layer in ['conv1', 'conv2', 'conv3', 'conv4-1', 'conv4-2']:
15+
netPatched.params['pnet-'+layer][0].data[...] = net.params[layer][0].data
16+
netPatched.params['pnet-'+layer][1].data[...] = net.params[layer][1].data
17+
18+
def convertDet2():
19+
net = caffe.Net('det2.prototxt', 'det2.caffemodel', caffe.TEST)
20+
21+
for layer in ['conv1', 'conv2', 'conv3', 'conv4', 'conv5-1', 'conv5-2']:
22+
netPatched.params['rnet-'+layer][0].data[...] = net.params[layer][0].data
23+
netPatched.params['rnet-'+layer][1].data[...] = net.params[layer][1].data
24+
25+
26+
def convertDet3():
27+
net = caffe.Net('det3.prototxt', 'det3.caffemodel', caffe.TEST)
28+
29+
for layer in ['conv1', 'conv2', 'conv3', 'conv4', 'conv5', 'conv6-1', 'conv6-2', 'conv6-3']:
30+
netPatched.params['onet-'+layer][0].data[...] = net.params[layer][0].data
31+
netPatched.params['onet-'+layer][1].data[...] = net.params[layer][1].data
32+
33+
convertDet1()
34+
convertDet2()
35+
convertDet3()
36+
37+
netPatched.save('mtcnn-relu.caffemodel')
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
#!/usr/bin/env python
2+
3+
import os
4+
os.environ['GLOG_minloglevel'] = '2'
5+
6+
import numpy as np
7+
import caffe
8+
import argparse
9+
10+
parser = argparse.ArgumentParser(description='Conversion options')
11+
parser.add_argument('-relu', action='store_true', help='Use ReLU instead of PReLU')
12+
parser.add_argument('-transp', action='store_true', help='Transpose convolution coefficients')
13+
args = parser.parse_args()
14+
15+
baseName = "mtcnn"
16+
if args.relu:
17+
baseName += "-relu"
18+
19+
if args.transp:
20+
baseName += "-transp"
21+
22+
netPatched = caffe.Net("{}.prototxt".format(baseName), caffe.TEST)
23+
24+
def convertDet1():
25+
net = caffe.Net('det1.prototxt', 'det1.caffemodel', caffe.TEST)
26+
27+
for pnet in ['pnet1', 'pnet2', 'pnet3', 'pnet4', 'pnet5', 'pnet6', 'pnet7', 'pnet8', 'pnet9']:
28+
for layer in ['conv1', 'conv2', 'conv3']:
29+
if args.transp:
30+
netPatched.params[pnet+'-'+layer][0].data[...] = np.transpose(net.params[layer][0].data, (0,1,3,2))
31+
else:
32+
netPatched.params[pnet+'-'+layer][0].data[...] = net.params[layer][0].data
33+
netPatched.params[pnet+'-'+layer][1].data[...] = net.params[layer][1].data
34+
35+
netPatched.params[pnet+'-conv4'][0].data[...] = \
36+
np.concatenate((net.params['conv4-1'][0].data, net.params['conv4-2'][0].data), axis=0)
37+
netPatched.params[pnet+'-conv4'][1].data[...] = \
38+
np.concatenate((net.params['conv4-1'][1].data, net.params['conv4-2'][1].data), axis=0)
39+
40+
if not args.relu:
41+
for layer in ['PReLU1', 'PReLU2', 'PReLU3']:
42+
netPatched.params[pnet+'-'+layer][0].data[...] = net.params[layer][0].data
43+
44+
def convertDet2():
45+
net = caffe.Net('det2.prototxt', 'det2.caffemodel', caffe.TEST)
46+
47+
for layer in ['conv1', 'conv2', 'conv3']:
48+
if args.transp:
49+
netPatched.params['rnet-'+layer][0].data[...] = np.transpose(net.params[layer][0].data, (0,1,3,2))
50+
else:
51+
netPatched.params['rnet-'+layer][0].data[...] = net.params[layer][0].data
52+
53+
netPatched.params['rnet-'+layer][1].data[...] = net.params[layer][1].data
54+
55+
for layer in ['conv4']:
56+
if args.transp:
57+
netPatched.params['rnet-'+layer][0].data[...] = np.reshape(np.transpose(np.reshape(net.params[layer][0].data, (128,64,3,3)), (0,1,3,2)), (128,576))
58+
else:
59+
netPatched.params['rnet-'+layer][0].data[...] = net.params[layer][0].data
60+
61+
netPatched.params['rnet-'+layer][1].data[...] = net.params[layer][1].data
62+
63+
netPatched.params['rnet-conv5'][0].data[...] = \
64+
np.concatenate((net.params['conv5-1'][0].data, net.params['conv5-2'][0].data), axis=0)
65+
netPatched.params['rnet-conv5'][1].data[...] = \
66+
np.concatenate((net.params['conv5-1'][1].data, net.params['conv5-2'][1].data), axis=0)
67+
68+
if not args.relu:
69+
for layer in ['prelu1', 'prelu2', 'prelu3', 'prelu4']:
70+
netPatched.params['rnet-'+layer][0].data[...] = net.params[layer][0].data
71+
72+
def convertDet3():
73+
net = caffe.Net('det3.prototxt', 'det3.caffemodel', caffe.TEST)
74+
75+
for layer in ['conv1', 'conv2', 'conv3', 'conv4']:
76+
if args.transp:
77+
netPatched.params['onet-'+layer][0].data[...] = np.transpose(net.params[layer][0].data, (0,1,3,2))
78+
else:
79+
netPatched.params['onet-'+layer][0].data[...] = net.params[layer][0].data
80+
netPatched.params['onet-'+layer][1].data[...] = net.params[layer][1].data
81+
82+
for layer in ['conv5']:
83+
if args.transp:
84+
netPatched.params['onet-'+layer][0].data[...] = np.reshape(np.transpose(np.reshape(net.params[layer][0].data, (256,128,3,3)), (0,1,3,2)), (256,1152))
85+
else:
86+
netPatched.params['onet-'+layer][0].data[...] = net.params[layer][0].data
87+
88+
netPatched.params['onet-'+layer][1].data[...] = net.params[layer][1].data
89+
90+
netPatched.params['onet-conv6'][0].data[...] = \
91+
np.concatenate((net.params['conv6-1'][0].data,
92+
net.params['conv6-2'][0].data,
93+
net.params['conv6-3'][0].data), axis=0)
94+
netPatched.params['onet-conv6'][1].data[...] = \
95+
np.concatenate((net.params['conv6-1'][1].data,
96+
net.params['conv6-2'][1].data,
97+
net.params['conv6-3'][1].data), axis=0)
98+
if not args.relu:
99+
for layer in ['prelu1', 'prelu2', 'prelu3', 'prelu4', 'prelu5']:
100+
netPatched.params['onet-'+layer][0].data[...] = net.params[layer][0].data
101+
102+
convertDet1()
103+
convertDet2()
104+
convertDet3()
105+
106+
netPatched.save('{}.caffemodel'.format(baseName))
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#!/usr/bin/env python
2+
3+
import os
4+
os.environ['GLOG_minloglevel'] = '2'
5+
6+
import numpy as np
7+
import caffe
8+
9+
def convertDet1():
10+
net = caffe.Net('det1.prototxt', 'det1.caffemodel', caffe.TEST)
11+
netPatched = caffe.Net('det1-relu.prototxt', caffe.TEST)
12+
13+
for layer in ['conv1', 'conv2', 'conv3', 'conv4-1', 'conv4-2']:
14+
netPatched.params[layer][0].data[...] = net.params[layer][0].data
15+
netPatched.params[layer][1].data[...] = net.params[layer][1].data
16+
17+
netPatched.save('det1-relu.caffemodel')
18+
19+
def convertDet2():
20+
net = caffe.Net('det2.prototxt', 'det2.caffemodel', caffe.TEST)
21+
netPatched = caffe.Net('det2-relu.prototxt', caffe.TEST)
22+
23+
for layer in ['conv1', 'conv2', 'conv3', 'conv4', 'conv5-1', 'conv5-2']:
24+
netPatched.params[layer][0].data[...] = net.params[layer][0].data
25+
netPatched.params[layer][1].data[...] = net.params[layer][1].data
26+
27+
netPatched.save('det2-relu.caffemodel')
28+
29+
30+
def convertDet3():
31+
net = caffe.Net('det3.prototxt', 'det3.caffemodel', caffe.TEST)
32+
netPatched = caffe.Net('det3-relu.prototxt', caffe.TEST)
33+
34+
for layer in ['conv1', 'conv2', 'conv3', 'conv4', 'conv5', 'conv6-1', 'conv6-2', 'conv6-3']:
35+
netPatched.params[layer][0].data[...] = net.params[layer][0].data
36+
netPatched.params[layer][1].data[...] = net.params[layer][1].data
37+
38+
netPatched.save('det3-relu.caffemodel')
39+
40+
convertDet1()
41+
convertDet2()
42+
convertDet3()
43+
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
#!/usr/bin/env python
2+
3+
import os
4+
os.environ['GLOG_minloglevel'] = '2'
5+
6+
import numpy as np
7+
import caffe
8+
9+
def convertDet1():
10+
net = caffe.Net('det1.prototxt', 'det1.caffemodel', caffe.TEST)
11+
netPatched = caffe.Net('det1-patched.prototxt', caffe.TEST)
12+
13+
for layer in ['conv1', 'conv2', 'conv3']:
14+
netPatched.params[layer][0].data[...] = np.transpose(net.params[layer][0].data, (0,1,3,2))
15+
netPatched.params[layer][1].data[...] = net.params[layer][1].data
16+
17+
netPatched.params['conv4'][0].data[...] = \
18+
np.concatenate((net.params['conv4-1'][0].data, net.params['conv4-2'][0].data), axis=0)
19+
netPatched.params['conv4'][1].data[...] = \
20+
np.concatenate((net.params['conv4-1'][1].data, net.params['conv4-2'][1].data), axis=0)
21+
22+
netPatched.save('det1-patched-transp.caffemodel')
23+
24+
def convertDet2():
25+
net = caffe.Net('det2.prototxt', 'det2.caffemodel', caffe.TEST)
26+
netPatched = caffe.Net('det2-patched.prototxt', caffe.TEST)
27+
28+
for layer in ['conv1', 'conv2', 'conv3']:
29+
netPatched.params[layer][0].data[...] = np.transpose(net.params[layer][0].data, (0,1,3,2))
30+
netPatched.params[layer][1].data[...] = net.params[layer][1].data
31+
32+
for layer in ['conv4']:
33+
netPatched.params[layer][0].data[...] = np.reshape(np.transpose(np.reshape(net.params[layer][0].data, (128,64,3,3)), (0,1,3,2)), (128,576))
34+
netPatched.params[layer][1].data[...] = net.params[layer][1].data
35+
36+
netPatched.params['conv5'][0].data[...] = \
37+
np.concatenate((net.params['conv5-1'][0].data, net.params['conv5-2'][0].data), axis=0)
38+
netPatched.params['conv5'][1].data[...] = \
39+
np.concatenate((net.params['conv5-1'][1].data, net.params['conv5-2'][1].data), axis=0)
40+
41+
netPatched.save('det2-patched-transp.caffemodel')
42+
43+
44+
def convertDet3():
45+
net = caffe.Net('det3.prototxt', 'det3.caffemodel', caffe.TEST)
46+
netPatched = caffe.Net('det3-patched.prototxt', caffe.TEST)
47+
48+
for layer in ['conv1', 'conv2', 'conv3', 'conv4']:
49+
netPatched.params[layer][0].data[...] = np.transpose(net.params[layer][0].data, (0,1,3,2))
50+
netPatched.params[layer][1].data[...] = net.params[layer][1].data
51+
52+
for layer in ['conv5']:
53+
netPatched.params[layer][0].data[...] = np.reshape(np.transpose(np.reshape(net.params[layer][0].data, (256,128,3,3)), (0,1,3,2)), (256,1152))
54+
netPatched.params[layer][1].data[...] = net.params[layer][1].data
55+
56+
netPatched.params['conv6'][0].data[...] = \
57+
np.concatenate((net.params['conv6-1'][0].data,
58+
net.params['conv6-2'][0].data,
59+
net.params['conv6-3'][0].data), axis=0)
60+
netPatched.params['conv6'][1].data[...] = \
61+
np.concatenate((net.params['conv6-1'][1].data,
62+
net.params['conv6-2'][1].data,
63+
net.params['conv6-3'][1].data), axis=0)
64+
65+
netPatched.save('det3-patched-transp.caffemodel')
66+
67+
convertDet1()
68+
convertDet2()
69+
convertDet3()
70+

0 commit comments

Comments
 (0)