提交 94b48ac5 编写于 作者: H HydrogenSulfate

add cpp serving & cpp infer chain, update TIPC docs

上级 079ad695
...@@ -113,7 +113,6 @@ if __name__ == "__main__": ...@@ -113,7 +113,6 @@ if __name__ == "__main__":
batch=False) batch=False)
# add retrieval procedure # add retrieval procedure
print(fetch_map.keys())
det_boxes = fetch_map["boxes"] det_boxes = fetch_map["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,
......
...@@ -110,7 +110,6 @@ bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/MobileNetV3/Mo ...@@ -110,7 +110,6 @@ bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/MobileNetV3/Mo
- [test_train_pact_inference_python 使用](docs/test_train_pact_inference_python.md):测试基于Python的模型PACT在线量化等基本功能。 - [test_train_pact_inference_python 使用](docs/test_train_pact_inference_python.md):测试基于Python的模型PACT在线量化等基本功能。
- [test_train_ptq_inference_python 使用](docs/test_train_ptq_inference_python.md):测试基于Python的模型KL离线量化等基本功能。 - [test_train_ptq_inference_python 使用](docs/test_train_ptq_inference_python.md):测试基于Python的模型KL离线量化等基本功能。
- [test_inference_cpp 使用](docs/test_inference_cpp.md) :测试基于C++的模型推理。 - [test_inference_cpp 使用](docs/test_inference_cpp.md) :测试基于C++的模型推理。
- [test_serving 使用](docs/test_serving.md) :测试基于Paddle Serving的服务化部署功能。
- [test_lite_arm_cpu_cpp 使用](docs/test_lite_arm_cpu_cpp.md): 测试基于Paddle-Lite的ARM CPU端c++预测部署功能. - [test_lite_arm_cpu_cpp 使用](docs/test_lite_arm_cpu_cpp.md): 测试基于Paddle-Lite的ARM CPU端c++预测部署功能.
- [test_paddle2onnx 使用](docs/test_paddle2onnx.md):测试Paddle2ONNX的模型转化功能,并验证正确性。 - [test_paddle2onnx 使用](docs/test_paddle2onnx.md):测试Paddle2ONNX的模型转化功能,并验证正确性。
- [test_serving_infer_python 使用](docs/test_serving_infer_python.md):测试python serving功能。 - [test_serving_infer_python 使用](docs/test_serving_infer_python.md):测试python serving功能。
......
===========================cpp_infer_params===========================
model_name:PPShiTuV2
cpp_infer_type:shitu
feature_inference_model_dir:./general_PPLCNetV2_base_pretrained_v1.0_infer/
det_inference_model_dir:./picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer/
cls_inference_url:https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/PP-ShiTuV2/general_PPLCNetV2_base_pretrained_v1.0_infer.tar
det_inference_url:https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer.tar
infer_quant:False
inference_cmd:./deploy/cpp_shitu/build/pp_shitu -c inference_drink.yaml
use_gpu:True|False
enable_mkldnn:False
cpu_threads:1
batch_size:1
use_tensorrt:False
precision:fp32
data_dir:./dataset/drink_dataset_v2.0
benchmark:True
generate_yaml_cmd:python3.7 test_tipc/generate_cpp_yaml.py
transform_index_cmd:python3.7 deploy/cpp_shitu/tools/transform_id_map.py -c inference_drink.yaml
===========================serving_params===========================
model_name:PPShiTuV2
python:python3.7
cls_inference_model_url:https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/PP-ShiTuV2/general_PPLCNetV2_base_pretrained_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_PPLCNetV2_base_pretrained_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_PPLCNetV2_base_pretrained_v1.0_serving/
--serving_client:./models/general_PPLCNetV2_base_pretrained_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
===========================serving_params===========================
model_name:PPShiTu
python:python3.7
cls_inference_model_url:https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/PP-ShiTuV2/general_PPLCNetV2_base_pretrained_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_PPLCNetV2_base_pretrained_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_PPLCNetV2_base_pretrained_v1.0_serving/
--serving_client:./models/general_PPLCNetV2_base_pretrained_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:recognition_web_service.py
--use_gpu:0|null
pipline:pipeline_http_client.py
===========================paddle2onnx_params===========================
model_name:PP-ShiTu_mainbody_det
python:python3.7
2onnx: paddle2onnx
--model_dir:./deploy/models/picodet_lcnet_x2_5_640_mainbody_infer/
--model_filename:inference.pdmodel
--params_filename:inference.pdiparams
--save_file:./deploy/models/picodet_lcnet_x2_5_640_mainbody_infer/inference.onnx
--opset_version:11
--enable_onnx_checker:True
inference_model_url:https://paddledet.bj.bcebos.com/models/picodet_lcnet_x2_5_640_mainbody_infer.tar
inference:null
Global.use_onnx:null
Global.inference_model_dir:null
Global.use_gpu:null
-c:null
\ No newline at end of file
...@@ -12,6 +12,7 @@ Linux GPU/CPU C++ 推理功能测试的主程序为`test_inference_cpp.sh`,可 ...@@ -12,6 +12,7 @@ Linux GPU/CPU C++ 推理功能测试的主程序为`test_inference_cpp.sh`,可
| MobileNetV3 | MobileNetV3_large_x1_0_KL | 支持 | 支持 | | MobileNetV3 | MobileNetV3_large_x1_0_KL | 支持 | 支持 |
| MobileNetV3 | MobileNetV3_large_x1_0_PACT | 支持 | 支持 | | MobileNetV3 | MobileNetV3_large_x1_0_PACT | 支持 | 支持 |
| PP-ShiTu | PPShiTu_general_rec、PPShiTu_mainbody_det | 支持 | 支持 | | PP-ShiTu | PPShiTu_general_rec、PPShiTu_mainbody_det | 支持 | 支持 |
| PP-ShiTuV2 | PPShiTuV2_general_rec、PPShiTu_mainbody_det | 支持 | 支持 |
| PP-ShiTu | GeneralRecognition_PPLCNet_x2_5_KL | 支持 | 支持 | | PP-ShiTu | GeneralRecognition_PPLCNet_x2_5_KL | 支持 | 支持 |
| PP-ShiTu | GeneralRecognition_PPLCNet_x2_5_PACT | 支持 | 支持 | | PP-ShiTu | GeneralRecognition_PPLCNet_x2_5_PACT | 支持 | 支持 |
| PPHGNet | PPHGNet_small | 支持 | 支持 | | PPHGNet | PPHGNet_small | 支持 | 支持 |
......
...@@ -15,6 +15,7 @@ Linux GPU/CPU C++ 服务化部署测试的主程序为`test_serving_infer_cpp.sh ...@@ -15,6 +15,7 @@ Linux GPU/CPU C++ 服务化部署测试的主程序为`test_serving_infer_cpp.sh
| PP-ShiTu | PPShiTu_general_rec、PPShiTu_mainbody_det | 支持 | 支持 | | PP-ShiTu | PPShiTu_general_rec、PPShiTu_mainbody_det | 支持 | 支持 |
| PP-ShiTu | GeneralRecognition_PPLCNet_x2_5_KL | 支持 | 支持 | | PP-ShiTu | GeneralRecognition_PPLCNet_x2_5_KL | 支持 | 支持 |
| PP-ShiTu | GeneralRecognition_PPLCNet_x2_5_PACT | 支持 | 支持 | | PP-ShiTu | GeneralRecognition_PPLCNet_x2_5_PACT | 支持 | 支持 |
| PP-ShiTuV2 | PPShiTuV2_general_rec、PPShiTu_mainbody_det | 支持 | 支持 |
| PPHGNet | PPHGNet_small | 支持 | 支持 | | PPHGNet | PPHGNet_small | 支持 | 支持 |
| PPHGNet | PPHGNet_small_KL | 支持 | 支持 | | PPHGNet | PPHGNet_small_KL | 支持 | 支持 |
| PPHGNet | PPHGNet_small_PACT | 支持 | 支持 | | PPHGNet | PPHGNet_small_PACT | 支持 | 支持 |
......
...@@ -15,6 +15,7 @@ Linux GPU/CPU PYTHON 服务化部署测试的主程序为`test_serving_infer_pyt ...@@ -15,6 +15,7 @@ Linux GPU/CPU PYTHON 服务化部署测试的主程序为`test_serving_infer_pyt
| PP-ShiTu | PPShiTu_general_rec、PPShiTu_mainbody_det | 支持 | 支持 | | PP-ShiTu | PPShiTu_general_rec、PPShiTu_mainbody_det | 支持 | 支持 |
| PP-ShiTu | GeneralRecognition_PPLCNet_x2_5_KL | 支持 | 支持 | | PP-ShiTu | GeneralRecognition_PPLCNet_x2_5_KL | 支持 | 支持 |
| PP-ShiTu | GeneralRecognition_PPLCNet_x2_5_PACT | 支持 | 支持 | | PP-ShiTu | GeneralRecognition_PPLCNet_x2_5_PACT | 支持 | 支持 |
| PP-ShiTuV2 | PPShiTuV2_general_rec、PPShiTu_mainbody_det | 支持 | 支持 |
| PPHGNet | PPHGNet_small | 支持 | 支持 | | PPHGNet | PPHGNet_small | 支持 | 支持 |
| PPHGNet | PPHGNet_small_KL | 支持 | 支持 | | PPHGNet | PPHGNet_small_KL | 支持 | 支持 |
| PPHGNet | PPHGNet_small_PACT | 支持 | 支持 | | PPHGNet | PPHGNet_small_PACT | 支持 | 支持 |
......
...@@ -10,6 +10,7 @@ Linux GPU/CPU 混合精度训练推理测试的主程序为`test_train_inference ...@@ -10,6 +10,7 @@ Linux GPU/CPU 混合精度训练推理测试的主程序为`test_train_inference
| :-------------: | :-------------------------------------: | :----------: | :----------: | | :-------------: | :-------------------------------------: | :----------: | :----------: |
| MobileNetV3 | MobileNetV3_large_x1_0 | 混合精度训练 | 混合精度训练 | | MobileNetV3 | MobileNetV3_large_x1_0 | 混合精度训练 | 混合精度训练 |
| PP-ShiTu | GeneralRecognition_PPLCNet_x2_5 | 混合精度训练 | 混合精度训练 | | PP-ShiTu | GeneralRecognition_PPLCNet_x2_5 | 混合精度训练 | 混合精度训练 |
| PP-ShiTuV2 | GeneralRecognitionV2_PPLCNetV2_base | 混合精度训练 | 混合精度训练 |
| PPHGNet | PPHGNet_small | 混合精度训练 | 混合精度训练 | | PPHGNet | PPHGNet_small | 混合精度训练 | 混合精度训练 |
| PPHGNet | PPHGNet_tiny | 混合精度训练 | 混合精度训练 | | PPHGNet | PPHGNet_tiny | 混合精度训练 | 混合精度训练 |
| PPLCNet | PPLCNet_x0_25 | 混合精度训练 | 混合精度训练 | | PPLCNet | PPLCNet_x0_25 | 混合精度训练 | 混合精度训练 |
...@@ -31,6 +32,7 @@ Linux GPU/CPU 混合精度训练推理测试的主程序为`test_train_inference ...@@ -31,6 +32,7 @@ Linux GPU/CPU 混合精度训练推理测试的主程序为`test_train_inference
| :-------------: | :-------------------------------------: | :--------: | :--------: | :-------: | | :-------------: | :-------------------------------------: | :--------: | :--------: | :-------: |
| MobileNetV3 | MobileNetV3_large_x1_0 | 支持 | 支持 | 1 | | MobileNetV3 | MobileNetV3_large_x1_0 | 支持 | 支持 | 1 |
| PP-ShiTu | GeneralRecognition_PPLCNet_x2_5 | 支持 | 支持 | 1 | | PP-ShiTu | GeneralRecognition_PPLCNet_x2_5 | 支持 | 支持 | 1 |
| PP-ShiTuV2 | GeneralRecognitionV2_PPLCNetV2_base | 支持 | 支持 | 1 |
| PPHGNet | PPHGNet_small | 支持 | 支持 | 1 | | PPHGNet | PPHGNet_small | 支持 | 支持 | 1 |
| PPHGNet | PPHGNet_tiny | 支持 | 支持 | 1 | | PPHGNet | PPHGNet_tiny | 支持 | 支持 | 1 |
| PPLCNet | PPLCNet_x0_25 | 支持 | 支持 | 1 | | PPLCNet | PPLCNet_x0_25 | 支持 | 支持 | 1 |
......
...@@ -10,6 +10,7 @@ Linux GPU/CPU PACT量化训练推理测试的主程序为`test_train_inference_p ...@@ -10,6 +10,7 @@ Linux GPU/CPU PACT量化训练推理测试的主程序为`test_train_inference_p
| :-------------: | :-------------------------------------: | :----------: | | :-------------: | :-------------------------------------: | :----------: |
| MobileNetV3 | MobileNetV3_large_x1_0 | PACT量化训练 | | MobileNetV3 | MobileNetV3_large_x1_0 | PACT量化训练 |
| PP-ShiTu | GeneralRecognition_PPLCNet_x2_5 | PACT量化训练 | | PP-ShiTu | GeneralRecognition_PPLCNet_x2_5 | PACT量化训练 |
| PP-ShiTuV2 | GeneralRecognitionV2_PPLCNetV2_base | PACT量化训练 |
| PPHGNet | PPHGNet_small | PACT量化训练 | | PPHGNet | PPHGNet_small | PACT量化训练 |
| PPHGNet | PPHGNet_tiny | PACT量化训练 | | PPHGNet | PPHGNet_tiny | PACT量化训练 |
| PPLCNet | PPLCNet_x0_25 | PACT量化训练 | | PPLCNet | PPLCNet_x0_25 | PACT量化训练 |
...@@ -31,6 +32,7 @@ Linux GPU/CPU PACT量化训练推理测试的主程序为`test_train_inference_p ...@@ -31,6 +32,7 @@ Linux GPU/CPU PACT量化训练推理测试的主程序为`test_train_inference_p
| :-------------: | :-------------------------------------: | :--------: | :--------: | :-------: | | :-------------: | :-------------------------------------: | :--------: | :--------: | :-------: |
| MobileNetV3 | MobileNetV3_large_x1_0 | 支持 | 支持 | 1 | | MobileNetV3 | MobileNetV3_large_x1_0 | 支持 | 支持 | 1 |
| PP-ShiTu | GeneralRecognition_PPLCNet_x2_5 | 支持 | 支持 | 1 | | PP-ShiTu | GeneralRecognition_PPLCNet_x2_5 | 支持 | 支持 | 1 |
| PP-ShiTuV2 | GeneralRecognitionV2_PPLCNetV2_base | 支持 | 支持 | 1 |
| PPHGNet | PPHGNet_small | 支持 | 支持 | 1 | | PPHGNet | PPHGNet_small | 支持 | 支持 | 1 |
| PPHGNet | PPHGNet_tiny | 支持 | 支持 | 1 | | PPHGNet | PPHGNet_tiny | 支持 | 支持 | 1 |
| PPLCNet | PPLCNet_x0_25 | 支持 | 支持 | 1 | | PPLCNet | PPLCNet_x0_25 | 支持 | 支持 | 1 |
......
...@@ -10,6 +10,7 @@ Linux GPU/CPU KL离线量化推理测试的主程序为`test_ptq_inference_pytho ...@@ -10,6 +10,7 @@ Linux GPU/CPU KL离线量化推理测试的主程序为`test_ptq_inference_pytho
| :-------------: | :-------------------------------------: | :----------: | | :-------------: | :-------------------------------------: | :----------: |
| MobileNetV3 | MobileNetV3_large_x1_0 | KL离线量化 | | MobileNetV3 | MobileNetV3_large_x1_0 | KL离线量化 |
| PP-ShiTu | GeneralRecognition_PPLCNet_x2_5 | KL离线量化 | | PP-ShiTu | GeneralRecognition_PPLCNet_x2_5 | KL离线量化 |
| PP-ShiTuV2 | GeneralRecognitionV2_PPLCNetV2_base | KL离线量化 |
| PPHGNet | PPHGNet_small | KL离线量化 | | PPHGNet | PPHGNet_small | KL离线量化 |
| PPHGNet | PPHGNet_tiny | KL离线量化 | | PPHGNet | PPHGNet_tiny | KL离线量化 |
| PPLCNet | PPLCNet_x0_25 | KL离线量化 | | PPLCNet | PPLCNet_x0_25 | KL离线量化 |
...@@ -31,6 +32,7 @@ Linux GPU/CPU KL离线量化推理测试的主程序为`test_ptq_inference_pytho ...@@ -31,6 +32,7 @@ Linux GPU/CPU KL离线量化推理测试的主程序为`test_ptq_inference_pytho
| :-------------: | :-------------------------------------: | :----------: | | :-------------: | :-------------------------------------: | :----------: |
| MobileNetV3 | MobileNetV3_large_x1_0 | KL离线量化 | | MobileNetV3 | MobileNetV3_large_x1_0 | KL离线量化 |
| PP-ShiTu | GeneralRecognition_PPLCNet_x2_5 | KL离线量化 | | PP-ShiTu | GeneralRecognition_PPLCNet_x2_5 | KL离线量化 |
| PP-ShiTuV2 | GeneralRecognitionV2_PPLCNetV2_base | KL离线量化 |
| PPHGNet | PPHGNet_small | KL离线量化 | | PPHGNet | PPHGNet_small | KL离线量化 |
| PPHGNet | PPHGNet_tiny | KL离线量化 | | PPHGNet | PPHGNet_tiny | KL离线量化 |
| PPLCNet | PPLCNet_x0_25 | KL离线量化 | | PPLCNet | PPLCNet_x0_25 | KL离线量化 |
......
...@@ -143,6 +143,8 @@ if [[ ${MODE} = "cpp_infer" ]]; then ...@@ -143,6 +143,8 @@ if [[ ${MODE} = "cpp_infer" ]]; then
cd dataset cd dataset
wget -nc https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/data/drink_dataset_v1.0.tar wget -nc https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/data/drink_dataset_v1.0.tar
tar -xf drink_dataset_v1.0.tar tar -xf drink_dataset_v1.0.tar
wget -nc https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/data/drink_dataset_v2.0.tar
tar -xf drink_dataset_v2.0.tar
else else
echo "Wrong cpp type in config file in line 3. only support cls, shitu" echo "Wrong cpp type in config file in line 3. only support cls, shitu"
fi fi
...@@ -288,6 +290,8 @@ if [[ ${MODE} = "serving_infer" ]]; then ...@@ -288,6 +290,8 @@ if [[ ${MODE} = "serving_infer" ]]; then
cd ./deploy cd ./deploy
wget -nc https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/data/drink_dataset_v1.0.tar --no-check-certificate wget -nc https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/data/drink_dataset_v1.0.tar --no-check-certificate
tar -xf drink_dataset_v1.0.tar tar -xf drink_dataset_v1.0.tar
wget -nc https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/data/drink_dataset_v2.0.tar --no-check-certificate
tar -xf drink_dataset_v2.0.tar
mkdir models mkdir models
cd models cd models
wget -nc ${cls_inference_model_url} && tar xf ${cls_tar_name} wget -nc ${cls_inference_model_url} && tar xf ${cls_tar_name}
......
...@@ -192,9 +192,19 @@ function func_serving_rec(){ ...@@ -192,9 +192,19 @@ 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}" OLD_IFS="${IFS}"
IFS='/'
tmp_arr=($cls_serving_server_value)
lastIndex=$((${#tmp_arr[@]}-1))
cls_serving_server_dirname="${tmp_arr[lastIndex]}"
tmp_arr=($cls_serving_client_value)
lastIndex=$((${#tmp_arr[@]}-1))
cls_serving_client_dirname="${tmp_arr[lastIndex]}"
IFS="${OLD_IFS}"
cp_prototxt_cmd="cp ./paddleserving/recognition/preprocess/${cls_serving_server_dirname}/*.prototxt ${cls_serving_server_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/${cls_serving_client_dirname}/*.prototxt ${cls_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_client/*.prototxt ${det_serving_client_value}"
eval ${cp_prototxt_cmd} eval ${cp_prototxt_cmd}
......
...@@ -311,7 +311,7 @@ echo "################### run test ###################" ...@@ -311,7 +311,7 @@ echo "################### run test ###################"
export Count=0 export Count=0
IFS="|" IFS="|"
if [[ ${model_name} = "PPShiTu" ]]; then if [[ ${model_name} =~ "PPShiTu" ]]; then
func_serving_rec func_serving_rec
else else
func_serving_cls func_serving_cls
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册