├── CONTRIBUTING.md ├── Deployment_Guide.md ├── Dockerfile_deepstream ├── LICENSE ├── README.md ├── Singularity_deepstream ├── Singularity_tao ├── Singularity_triton └── workspace ├── Start_here.ipynb ├── jupyter_notebook ├── 1.Data_labeling_and_preprocessing.ipynb ├── 2.Object_detection_using_TAO_YOLOv4.ipynb ├── 3.Model_deployment_with_Triton_Inference_Server.ipynb ├── 4.Model_deployment_with_DeepStream.ipynb ├── 5.Measure_object_size_using_OpenCV.ipynb ├── 6.Challenge_DeepStream.ipynb ├── 7.Challenge_Triton.ipynb └── images │ ├── architecture.jpg │ ├── augmenting.png │ ├── deepstream_overview.jpg │ ├── deepstream_python_bindings.png │ ├── ds_overview.png │ ├── ds_workflow.png │ ├── dstream_deploy_options.png │ ├── git_branching.jpg │ ├── label_studio_1.png │ ├── label_studio_10.png │ ├── label_studio_11.png │ ├── label_studio_2.png │ ├── label_studio_3.png │ ├── label_studio_4.png │ ├── label_studio_5.png │ ├── label_studio_6.png │ ├── label_studio_7.png │ ├── label_studio_8.png │ ├── label_studio_9.png │ ├── ngc_key.png │ ├── ngc_setup_key.png │ ├── nvinfer.png │ ├── nvosd.png │ ├── nvtracker.png │ ├── nvvidconv.png │ ├── pads.png │ ├── pipeline.png │ ├── prep_pipeline.png │ ├── pruned_vs_unpruned.png │ ├── res_mario.jpg │ ├── tao_cv_qat_workflow.png │ ├── tao_deepstream.jpeg │ ├── tao_tf_user_interaction.png │ ├── tao_toolkit.jpeg │ ├── test2.png │ ├── triton_inference_server.jpg │ ├── yolo_kitti.png │ ├── yolo_label.png │ └── yolo_mark.png ├── source_code ├── N2 │ └── generate_val_dataset.py ├── N3 │ ├── frame.py │ ├── postprocessor.py │ ├── preprocess_input.py │ ├── triton_model.py │ ├── user_data.py │ ├── utils.py │ ├── yolov4_model.py │ └── yolov4_postprocessor.py ├── N4 │ ├── bus_call.py │ ├── config_tracker_NvDCF_perf.yml │ ├── dstest2_tracker_config.txt │ └── pgie_yolov4_tao_config.txt ├── N5 │ └── calc_object_size.py └── dataset.py └── specs ├── default_spec.txt ├── yolo_v4_retrain_resnet18_kitti.txt ├── yolo_v4_retrain_resnet18_kitti_seq.txt ├── yolo_v4_tfrecords_kitti_train.txt ├── yolo_v4_tfrecords_kitti_val.txt ├── yolo_v4_train_resnet18_kitti.txt └── yolo_v4_train_resnet18_kitti_seq.txt /CONTRIBUTING.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/CONTRIBUTING.md -------------------------------------------------------------------------------- /Deployment_Guide.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/Deployment_Guide.md -------------------------------------------------------------------------------- /Dockerfile_deepstream: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/Dockerfile_deepstream -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/LICENSE -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/README.md -------------------------------------------------------------------------------- /Singularity_deepstream: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/Singularity_deepstream -------------------------------------------------------------------------------- /Singularity_tao: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/Singularity_tao -------------------------------------------------------------------------------- /Singularity_triton: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/Singularity_triton -------------------------------------------------------------------------------- /workspace/Start_here.ipynb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/Start_here.ipynb -------------------------------------------------------------------------------- /workspace/jupyter_notebook/1.Data_labeling_and_preprocessing.ipynb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/1.Data_labeling_and_preprocessing.ipynb -------------------------------------------------------------------------------- /workspace/jupyter_notebook/2.Object_detection_using_TAO_YOLOv4.ipynb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/2.Object_detection_using_TAO_YOLOv4.ipynb -------------------------------------------------------------------------------- /workspace/jupyter_notebook/3.Model_deployment_with_Triton_Inference_Server.ipynb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/3.Model_deployment_with_Triton_Inference_Server.ipynb -------------------------------------------------------------------------------- /workspace/jupyter_notebook/4.Model_deployment_with_DeepStream.ipynb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/4.Model_deployment_with_DeepStream.ipynb -------------------------------------------------------------------------------- /workspace/jupyter_notebook/5.Measure_object_size_using_OpenCV.ipynb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/5.Measure_object_size_using_OpenCV.ipynb -------------------------------------------------------------------------------- /workspace/jupyter_notebook/6.Challenge_DeepStream.ipynb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/6.Challenge_DeepStream.ipynb -------------------------------------------------------------------------------- /workspace/jupyter_notebook/7.Challenge_Triton.ipynb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/7.Challenge_Triton.ipynb -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/architecture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/architecture.jpg -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/augmenting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/augmenting.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/deepstream_overview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/deepstream_overview.jpg -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/deepstream_python_bindings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/deepstream_python_bindings.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/ds_overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/ds_overview.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/ds_workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/ds_workflow.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/dstream_deploy_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/dstream_deploy_options.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/git_branching.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/git_branching.jpg -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/label_studio_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/label_studio_1.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/label_studio_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/label_studio_10.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/label_studio_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/label_studio_11.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/label_studio_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/label_studio_2.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/label_studio_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/label_studio_3.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/label_studio_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/label_studio_4.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/label_studio_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/label_studio_5.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/label_studio_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/label_studio_6.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/label_studio_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/label_studio_7.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/label_studio_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/label_studio_8.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/label_studio_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/label_studio_9.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/ngc_key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/ngc_key.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/ngc_setup_key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/ngc_setup_key.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/nvinfer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/nvinfer.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/nvosd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/nvosd.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/nvtracker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/nvtracker.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/nvvidconv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/nvvidconv.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/pads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/pads.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/pipeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/pipeline.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/prep_pipeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/prep_pipeline.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/pruned_vs_unpruned.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/pruned_vs_unpruned.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/res_mario.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/res_mario.jpg -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/tao_cv_qat_workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/tao_cv_qat_workflow.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/tao_deepstream.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/tao_deepstream.jpeg -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/tao_tf_user_interaction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/tao_tf_user_interaction.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/tao_toolkit.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/tao_toolkit.jpeg -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/test2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/test2.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/triton_inference_server.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/triton_inference_server.jpg -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/yolo_kitti.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/yolo_kitti.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/yolo_label.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/yolo_label.png -------------------------------------------------------------------------------- /workspace/jupyter_notebook/images/yolo_mark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/jupyter_notebook/images/yolo_mark.png -------------------------------------------------------------------------------- /workspace/source_code/N2/generate_val_dataset.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/source_code/N2/generate_val_dataset.py -------------------------------------------------------------------------------- /workspace/source_code/N3/frame.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/source_code/N3/frame.py -------------------------------------------------------------------------------- /workspace/source_code/N3/postprocessor.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/source_code/N3/postprocessor.py -------------------------------------------------------------------------------- /workspace/source_code/N3/preprocess_input.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/source_code/N3/preprocess_input.py -------------------------------------------------------------------------------- /workspace/source_code/N3/triton_model.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/source_code/N3/triton_model.py -------------------------------------------------------------------------------- /workspace/source_code/N3/user_data.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/source_code/N3/user_data.py -------------------------------------------------------------------------------- /workspace/source_code/N3/utils.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/source_code/N3/utils.py -------------------------------------------------------------------------------- /workspace/source_code/N3/yolov4_model.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/source_code/N3/yolov4_model.py -------------------------------------------------------------------------------- /workspace/source_code/N3/yolov4_postprocessor.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/source_code/N3/yolov4_postprocessor.py -------------------------------------------------------------------------------- /workspace/source_code/N4/bus_call.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/source_code/N4/bus_call.py -------------------------------------------------------------------------------- /workspace/source_code/N4/config_tracker_NvDCF_perf.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/source_code/N4/config_tracker_NvDCF_perf.yml -------------------------------------------------------------------------------- /workspace/source_code/N4/dstest2_tracker_config.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/source_code/N4/dstest2_tracker_config.txt -------------------------------------------------------------------------------- /workspace/source_code/N4/pgie_yolov4_tao_config.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/source_code/N4/pgie_yolov4_tao_config.txt -------------------------------------------------------------------------------- /workspace/source_code/N5/calc_object_size.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/source_code/N5/calc_object_size.py -------------------------------------------------------------------------------- /workspace/source_code/dataset.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/source_code/dataset.py -------------------------------------------------------------------------------- /workspace/specs/default_spec.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/specs/default_spec.txt -------------------------------------------------------------------------------- /workspace/specs/yolo_v4_retrain_resnet18_kitti.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/specs/yolo_v4_retrain_resnet18_kitti.txt -------------------------------------------------------------------------------- /workspace/specs/yolo_v4_retrain_resnet18_kitti_seq.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/specs/yolo_v4_retrain_resnet18_kitti_seq.txt -------------------------------------------------------------------------------- /workspace/specs/yolo_v4_tfrecords_kitti_train.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/specs/yolo_v4_tfrecords_kitti_train.txt -------------------------------------------------------------------------------- /workspace/specs/yolo_v4_tfrecords_kitti_val.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/specs/yolo_v4_tfrecords_kitti_val.txt -------------------------------------------------------------------------------- /workspace/specs/yolo_v4_train_resnet18_kitti.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/specs/yolo_v4_train_resnet18_kitti.txt -------------------------------------------------------------------------------- /workspace/specs/yolo_v4_train_resnet18_kitti_seq.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openhackathons-org/End-to-End-Computer-Vision/HEAD/workspace/specs/yolo_v4_train_resnet18_kitti_seq.txt --------------------------------------------------------------------------------