mirror of
https://github.com/PaddlePaddle/PaddleClas.git
synced 2025-06-03 21:55:06 +08:00
add cpp serving infer
This commit is contained in:
parent
1d0da582f1
commit
29ccd204b3
@ -113,10 +113,9 @@ if __name__ == "__main__":
|
|||||||
"im_shape": im_shape},
|
"im_shape": im_shape},
|
||||||
fetch=["features", "boxes"],
|
fetch=["features", "boxes"],
|
||||||
batch=False)
|
batch=False)
|
||||||
print(fetch_map.keys())
|
|
||||||
#add retrieval procedure
|
#add retrieval procedure
|
||||||
det_boxes = fetch_map["boxes"]
|
det_boxes = fetch_map["boxes"]
|
||||||
print(det_boxes)
|
|
||||||
searcher, id_map = init_index(index_dir)
|
searcher, id_map = init_index(index_dir)
|
||||||
results = postprocess(fetch_map, feature_normalize, det_boxes, searcher,
|
results = postprocess(fetch_map, feature_normalize, det_boxes, searcher,
|
||||||
id_map, return_k, rec_score_thres, rec_nms_thresold)
|
id_map, return_k, rec_score_thres, rec_nms_thresold)
|
||||||
|
@ -12,16 +12,20 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
import sys
|
import base64
|
||||||
from paddle_serving_client import Client
|
|
||||||
|
|
||||||
#app
|
|
||||||
from paddle_serving_app.reader import Sequential, URL2Image, Resize
|
|
||||||
from paddle_serving_app.reader import CenterCrop, RGB2BGR, Transpose, Div, Normalize
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
from paddle_serving_client import Client
|
||||||
|
|
||||||
|
|
||||||
|
def bytes_to_base64(image: bytes) -> str:
|
||||||
|
"""encode bytes into base64 string
|
||||||
|
"""
|
||||||
|
return base64.b64encode(image).decode('utf8')
|
||||||
|
|
||||||
|
|
||||||
client = Client()
|
client = Client()
|
||||||
client.load_client_config("./ResNet50_vd_serving/serving_server_conf.prototxt")
|
client.load_client_config("./ResNet50_client/serving_client_conf.prototxt")
|
||||||
client.connect(["127.0.0.1:9292"])
|
client.connect(["127.0.0.1:9292"])
|
||||||
|
|
||||||
label_dict = {}
|
label_dict = {}
|
||||||
@ -31,22 +35,17 @@ with open("imagenet.label") as fin:
|
|||||||
label_dict[label_idx] = line.strip()
|
label_dict[label_idx] = line.strip()
|
||||||
label_idx += 1
|
label_idx += 1
|
||||||
|
|
||||||
#preprocess
|
image_file = "./daisy.jpg"
|
||||||
seq = Sequential([
|
|
||||||
URL2Image(), Resize(256), CenterCrop(224), RGB2BGR(), Transpose((2, 0, 1)),
|
|
||||||
Div(255), Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225], True)
|
|
||||||
])
|
|
||||||
|
|
||||||
start = time.time()
|
|
||||||
image_file = "https://paddle-serving.bj.bcebos.com/imagenet-example/daisy.jpg"
|
|
||||||
for i in range(1):
|
for i in range(1):
|
||||||
img = seq(image_file)
|
start = time.time()
|
||||||
fetch_map = client.predict(
|
with open(image_file, 'rb') as img_file:
|
||||||
feed={"inputs": img}, fetch=["prediction"], batch=False)
|
image_data = img_file.read()
|
||||||
|
image = bytes_to_base64(image_data)
|
||||||
prob = max(fetch_map["prediction"][0])
|
fetch_dict = client.predict(
|
||||||
label = label_dict[fetch_map["prediction"][0].tolist().index(prob)].strip(
|
feed={"inputs": image}, fetch=["prediction"], batch=False)
|
||||||
).replace(",", "")
|
prob = max(fetch_dict["prediction"][0])
|
||||||
print("prediction: {}, probability: {}".format(label, prob))
|
label = label_dict[fetch_dict["prediction"][0].tolist().index(
|
||||||
end = time.time()
|
prob)].strip().replace(",", "")
|
||||||
print(end - start)
|
print("prediction: {}, probability: {}".format(label, prob))
|
||||||
|
end = time.time()
|
||||||
|
print(end - start)
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
===========================serving_params===========================
|
||||||
|
model_name:PPShiTu
|
||||||
|
python:python3.7
|
||||||
|
cls_inference_model_url:https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/general_PPLCNet_x2_5_lite_v1.0_infer.tar
|
||||||
|
det_inference_model_url:https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer.tar
|
||||||
|
trans_model:-m paddle_serving_client.convert
|
||||||
|
--dirname:./models/general_PPLCNet_x2_5_lite_v1.0_infer/
|
||||||
|
--dirname:./models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer/
|
||||||
|
--model_filename:inference.pdmodel
|
||||||
|
--params_filename:inference.pdiparams
|
||||||
|
--serving_server:./models/general_PPLCNet_x2_5_lite_v1.0_serving/
|
||||||
|
--serving_client:./models/general_PPLCNet_x2_5_lite_v1.0_client/
|
||||||
|
--serving_server:./models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_serving/
|
||||||
|
--serving_client:./models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_client/
|
||||||
|
serving_dir:./paddleserving/recognition
|
||||||
|
web_service:null
|
||||||
|
--use_gpu:0|null
|
||||||
|
pipline:test_cpp_serving_client.py
|
@ -84,16 +84,16 @@ function func_serving_cls(){
|
|||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
set_client_feed_type_cmd="sed -i '/feed_type/,/: .*/s/feed_type: .*/feed_type: 20/' ${serving_client_value}/serving_client_conf.prototxt"
|
serving_client_dir_name=$(func_get_url_file_name "$serving_client_value")
|
||||||
|
set_client_feed_type_cmd="sed -i '/feed_type/,/: .*/s/feed_type: .*/feed_type: 20/' ${serving_client_dir_name}/serving_client_conf.prototxt"
|
||||||
eval ${set_client_feed_type_cmd}
|
eval ${set_client_feed_type_cmd}
|
||||||
set_client_shape_cmd="sed -i '/shape: 3/,/shape: 3/s/shape: 3/shape: 1/' ${serving_client_value}/serving_client_conf.prototxt"
|
set_client_shape_cmd="sed -i '/shape: 3/,/shape: 3/s/shape: 3/shape: 1/' ${serving_client_dir_name}/serving_client_conf.prototxt"
|
||||||
eval ${set_client_shape_cmd}
|
eval ${set_client_shape_cmd}
|
||||||
set_client_shape224_cmd="sed -i '/shape: 224/,/shape: 224/s/shape: 224//' ${serving_client_value}/serving_client_conf.prototxt"
|
set_client_shape224_cmd="sed -i '/shape: 224/,/shape: 224/s/shape: 224//' ${serving_client_dir_name}/serving_client_conf.prototxt"
|
||||||
eval ${set_client_shape224_cmd}
|
eval ${set_client_shape224_cmd}
|
||||||
set_client_shape224_cmd="sed -i '/shape: 224/,/shape: 224/s/shape: 224//' ${serving_client_value}/serving_client_conf.prototxt"
|
set_client_shape224_cmd="sed -i '/shape: 224/,/shape: 224/s/shape: 224//' ${serving_client_dir_name}/serving_client_conf.prototxt"
|
||||||
eval ${set_client_shape224_cmd}
|
eval ${set_client_shape224_cmd}
|
||||||
|
|
||||||
serving_client_dir_name=$(func_get_url_file_name "$serving_client_value")
|
|
||||||
set_pipeline_load_config_cmd="sed -i '/load_client_config/,/.prototxt/s/.\/.*\/serving_client_conf.prototxt/.\/${serving_client_dir_name}\/serving_client_conf.prototxt/' ${pipeline_py}"
|
set_pipeline_load_config_cmd="sed -i '/load_client_config/,/.prototxt/s/.\/.*\/serving_client_conf.prototxt/.\/${serving_client_dir_name}\/serving_client_conf.prototxt/' ${pipeline_py}"
|
||||||
eval ${set_pipeline_load_config_cmd}
|
eval ${set_pipeline_load_config_cmd}
|
||||||
|
|
||||||
@ -105,10 +105,12 @@ function func_serving_cls(){
|
|||||||
for use_gpu in ${web_use_gpu_list[*]}; do
|
for use_gpu in ${web_use_gpu_list[*]}; do
|
||||||
if [[ ${use_gpu} = "null" ]]; then
|
if [[ ${use_gpu} = "null" ]]; then
|
||||||
web_service_cpp_cmd="${python_} -m paddle_serving_server.serve --model ${serving_server_dir_name} --op GeneralClasOp --port 9292 &"
|
web_service_cpp_cmd="${python_} -m paddle_serving_server.serve --model ${serving_server_dir_name} --op GeneralClasOp --port 9292 &"
|
||||||
|
# echo ${web_service_cpp_cmd}
|
||||||
eval ${web_service_cpp_cmd}
|
eval ${web_service_cpp_cmd}
|
||||||
sleep 5s
|
sleep 5s
|
||||||
_save_log_path="${LOG_PATH}/server_infer_cpp_cpu_pipeline_batchsize_1.log"
|
_save_log_path="${LOG_PATH}/server_infer_cpp_cpu_pipeline_batchsize_1.log"
|
||||||
pipeline_cmd="${python_} test_cpp_serving_client.py > ${_save_log_path} 2>&1 "
|
pipeline_cmd="${python_} test_cpp_serving_client.py > ${_save_log_path} 2>&1 "
|
||||||
|
echo {pipeline_cmd}
|
||||||
eval ${pipeline_cmd}
|
eval ${pipeline_cmd}
|
||||||
last_status=${PIPESTATUS[0]}
|
last_status=${PIPESTATUS[0]}
|
||||||
eval "cat ${_save_log_path}"
|
eval "cat ${_save_log_path}"
|
||||||
@ -122,8 +124,7 @@ function func_serving_cls(){
|
|||||||
|
|
||||||
_save_log_path="${LOG_PATH}/server_infer_cpp_gpu_pipeline_batchsize_1.log"
|
_save_log_path="${LOG_PATH}/server_infer_cpp_gpu_pipeline_batchsize_1.log"
|
||||||
pipeline_cmd="${python_} test_cpp_serving_client.py > ${_save_log_path} 2>&1 "
|
pipeline_cmd="${python_} test_cpp_serving_client.py > ${_save_log_path} 2>&1 "
|
||||||
|
eval ${pipeline_cmd}
|
||||||
eval $pipeline_cmd
|
|
||||||
last_status=${PIPESTATUS[0]}
|
last_status=${PIPESTATUS[0]}
|
||||||
eval "cat ${_save_log_path}"
|
eval "cat ${_save_log_path}"
|
||||||
status_check ${last_status} "${pipeline_cmd}" "${status_log}" "${model_name}"
|
status_check ${last_status} "${pipeline_cmd}" "${status_log}" "${model_name}"
|
||||||
@ -245,7 +246,6 @@ function func_serving_rec(){
|
|||||||
done
|
done
|
||||||
|
|
||||||
# pdserving
|
# pdserving
|
||||||
export SERVING_BIN=$PWD/Serving/server-build-gpu-opencv/core/general-server/serving
|
|
||||||
cd ./deploy
|
cd ./deploy
|
||||||
set_dirname=$(func_set_params "${cls_infer_model_dir_key}" "${cls_infer_model_dir_value}")
|
set_dirname=$(func_set_params "${cls_infer_model_dir_key}" "${cls_infer_model_dir_value}")
|
||||||
set_model_filename=$(func_set_params "${model_filename_key}" "${model_filename_value}")
|
set_model_filename=$(func_set_params "${model_filename_key}" "${model_filename_value}")
|
||||||
@ -263,15 +263,22 @@ function func_serving_rec(){
|
|||||||
det_trans_model_cmd="${python_interp} ${trans_model_py} ${set_dirname} ${set_model_filename} ${set_params_filename} ${set_serving_server} ${set_serving_client}"
|
det_trans_model_cmd="${python_interp} ${trans_model_py} ${set_dirname} ${set_model_filename} ${set_params_filename} ${set_serving_server} ${set_serving_client}"
|
||||||
eval $det_trans_model_cmd
|
eval $det_trans_model_cmd
|
||||||
|
|
||||||
cp_prototxt_cmd="cp ./paddleserving/recognition/preprocess/general_PPLCNet_x2_5_lite_v1.0_serving/*.prototxt ${cls_serving_server_value}"
|
if [[ ${FILENAME} =~ "cpp" ]]; then
|
||||||
eval ${cp_prototxt_cmd}
|
cp_prototxt_cmd="cp ./paddleserving/recognition/preprocess/general_PPLCNet_x2_5_lite_v1.0_serving/*.prototxt ${cls_serving_server_value}"
|
||||||
cp_prototxt_cmd="cp ./paddleserving/recognition/preprocess/general_PPLCNet_x2_5_lite_v1.0_client/*.prototxt ${cls_serving_client_value}"
|
eval ${cp_prototxt_cmd}
|
||||||
eval ${cp_prototxt_cmd}
|
cp_prototxt_cmd="cp ./paddleserving/recognition/preprocess/general_PPLCNet_x2_5_lite_v1.0_client/*.prototxt ${cls_serving_client_value}"
|
||||||
cp_prototxt_cmd="cp ./paddleserving/recognition/preprocess/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_client/*.prototxt ${det_serving_client_value}"
|
eval ${cp_prototxt_cmd}
|
||||||
eval ${cp_prototxt_cmd}
|
cp_prototxt_cmd="cp ./paddleserving/recognition/preprocess/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_client/*.prototxt ${det_serving_client_value}"
|
||||||
cp_prototxt_cmd="cp ./paddleserving/recognition/preprocess/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_serving/*.prototxt ${det_serving_server_value}"
|
eval ${cp_prototxt_cmd}
|
||||||
eval ${cp_prototxt_cmd}
|
cp_prototxt_cmd="cp ./paddleserving/recognition/preprocess/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_serving/*.prototxt ${det_serving_server_value}"
|
||||||
|
eval ${cp_prototxt_cmd}
|
||||||
|
else
|
||||||
|
# modify the alias_name of fetch_var to "outputs"
|
||||||
|
server_fetch_var_line_cmd="sed -i '/fetch_var/,/is_lod_tensor/s/alias_name: .*/alias_name: \"features\"/' $cls_serving_server_value/serving_server_conf.prototxt"
|
||||||
|
eval ${server_fetch_var_line_cmd}
|
||||||
|
client_fetch_var_line_cmd="sed -i '/fetch_var/,/is_lod_tensor/s/alias_name: .*/alias_name: \"features\"/' $cls_serving_client_value/serving_client_conf.prototxt"
|
||||||
|
eval ${client_fetch_var_line_cmd}
|
||||||
|
fi
|
||||||
prototxt_dataline=$(awk 'NR==1, NR==3{print}' ${cls_serving_server_value}/serving_server_conf.prototxt)
|
prototxt_dataline=$(awk 'NR==1, NR==3{print}' ${cls_serving_server_value}/serving_server_conf.prototxt)
|
||||||
IFS=$'\n'
|
IFS=$'\n'
|
||||||
prototxt_lines=(${prototxt_dataline})
|
prototxt_lines=(${prototxt_dataline})
|
||||||
@ -283,6 +290,7 @@ function func_serving_rec(){
|
|||||||
unset http_proxy
|
unset http_proxy
|
||||||
|
|
||||||
if [[ ${FILENAME} =~ "cpp" ]]; then
|
if [[ ${FILENAME} =~ "cpp" ]]; then
|
||||||
|
export SERVING_BIN=$PWD/../Serving/server-build-gpu-opencv/core/general-server/serving
|
||||||
for use_gpu in ${web_use_gpu_list[*]}; do
|
for use_gpu in ${web_use_gpu_list[*]}; do
|
||||||
if [ ${use_gpu} = "null" ]; then
|
if [ ${use_gpu} = "null" ]; then
|
||||||
det_serving_server_dir_name=$(func_get_url_file_name "$det_serving_server_value")
|
det_serving_server_dir_name=$(func_get_url_file_name "$det_serving_server_value")
|
||||||
@ -290,7 +298,7 @@ function func_serving_rec(){
|
|||||||
eval $web_service_cpp_cmd
|
eval $web_service_cpp_cmd
|
||||||
sleep 5s
|
sleep 5s
|
||||||
_save_log_path="${LOG_PATH}/server_infer_cpp_cpu_batchsize_1.log"
|
_save_log_path="${LOG_PATH}/server_infer_cpp_cpu_batchsize_1.log"
|
||||||
pipeline_cmd="${python_interp} test_cpp_serving_client.py > ${_save_log_path} 2>&1 "
|
pipeline_cmd="${python_interp} ${pipeline_py} > ${_save_log_path} 2>&1 "
|
||||||
eval ${pipeline_cmd}
|
eval ${pipeline_cmd}
|
||||||
last_status=${PIPESTATUS[0]}
|
last_status=${PIPESTATUS[0]}
|
||||||
eval "cat ${_save_log_path}"
|
eval "cat ${_save_log_path}"
|
||||||
@ -303,7 +311,7 @@ function func_serving_rec(){
|
|||||||
eval $web_service_cpp_cmd
|
eval $web_service_cpp_cmd
|
||||||
sleep 5s
|
sleep 5s
|
||||||
_save_log_path="${LOG_PATH}/server_infer_cpp_gpu_batchsize_1.log"
|
_save_log_path="${LOG_PATH}/server_infer_cpp_gpu_batchsize_1.log"
|
||||||
pipeline_cmd="${python_interp} test_cpp_serving_client.py > ${_save_log_path} 2>&1 "
|
pipeline_cmd="${python_interp} ${pipeline_py} > ${_save_log_path} 2>&1 "
|
||||||
eval ${pipeline_cmd}
|
eval ${pipeline_cmd}
|
||||||
last_status=${PIPESTATUS[0]}
|
last_status=${PIPESTATUS[0]}
|
||||||
eval "cat ${_save_log_path}"
|
eval "cat ${_save_log_path}"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user