Commit Graph

89 Commits (43e6714f47dd7caaf4c80d4823ccdd482ace4644)

Author SHA1 Message Date
lzhangzz 43e6714f47
[SDK] Fix asan errors (#308)
* fix several heap-use-after-free bugs

* rebase master

* add option for sanitizers

* rebase master

* fix conflicts
2021-12-21 10:47:21 +08:00
RunningLeon d9b23bfc6f
[fix]: get tensor for DataContainer case (#307)
* fix DataContainer case for get_tensor_from_input

* fix docstring
2021-12-20 19:49:44 +08:00
Yifan Zhou 0f9f0a60e4
[Enhancement]: Update configs for OpenVINO (#306)
* Update config for OpenVINO

* Update test

* Update better test

* Update instance-seg config of OpenVINO
2021-12-20 17:56:25 +08:00
q.yao abdf64a576
[Fix] support ncnn faster-rcnn (#304)
* wtf

* Support fcos ncnn end2end

* support ncnn two stage detector

* fix test
2021-12-20 15:43:38 +08:00
RunningLeon fabdb473bb
Update ncnn test (#298)
* update ncnn test

* type hint

* update test ocr

* update mmseg ut

* ignore ncnn rpn head test

* add logging

* fix ssd base dense head test

* recover bacth in ncnn wrapper

* fix ncnn_ops_ut

* fix yapf

* recover test ops

* fix run_with_backend False

* Revert "fix run_with_backend False"

This reverts commit 83f8f915a25e800f5c2db339584d164ba40b2d9b.

* disable ncnn test test_pytorch_functions.py

Co-authored-by: hanrui1sensetime <83800577+hanrui1sensetime@users.noreply.github.com>
Co-authored-by: hanrui1sensetime <hanrui1@sensetime.com>
2021-12-20 14:05:13 +08:00
RunningLeon ab5c51f3ab
fix mmdet tests (#302)
* fix mmdet tests

* fix
2021-12-18 14:36:54 +08:00
lvhan028 3be1779e66
Refactor tests (#283)
* fix sdk model's pipeline.json

* resize INT64 mask

* refactor unit tests

* fix api in model.h

* remove 'customs' from meta info

* fix zip model

* fix clang-format issue

* put tc on each backend into a SECTION

* change SECTION title

* add DYNAMIC_SECTION for capi unit test

* change 'devices' to 'device_names'

* change trt to tensorrt

* remove uncessary check

* add color_type 'color_ignore_orientation' which is used in ocr

* 'min_width', 'max_width' and 'backend' might be null in pipeline config

* fix clang-format issue

* remove useless code
2021-12-17 19:57:37 +08:00
AllentDan f94d7b5abe
[Feature] Dump jsons to SDK (#279)
* save cods

* save codes

* save codes

* add docstring and fix ut

* use Resize to replace img_scale

* use Dict instead of dict()

* net && weights

* resolve comments

* update pipeline

* update pipeline

* update pipeline

* refactor preprocess

* merge master

* use imagetotensor

* use imagetotensor

* fix typos and improve docstring

* resolve comments

* update lq to img in mmedit

* add mask_thr_binary

* refactor dump info

* resolve comments

* add instance seg to dump info temperarily

* update meta_keys

* update meta_keys

* add meta_keys condition

* update postprocess for mmseg
2021-12-17 11:39:16 +08:00
hanrui1sensetime 3e8237d8bb
[Feature] Support end2end mmdet2.19 retina mobilessd (#286)
* support end2end mmdet2.19 retina mobilessd

* fix yapf

* add end2end fsaf

* fix lint

* fix comments

* fix lint

* add static configs

* fix docformatter

* move ssdhead

* add rewrite for l2norm

* fix ncnn ssd

* fix isort

* rename config

* add ssd_head_ut

* fix string

* align ssd

* remove unused bbox rewriter

Co-authored-by: grimoire <yaoqian@sensetime.com>
Co-authored-by: maningsheng <mnsheng@yeah.net>
2021-12-17 10:46:54 +08:00
lzhangzz a494a6f6ff
[SDK] sync changes according to performance benchmarks (#297)
* sync SDK changes according to performance benchmarks

* fix end-of-file lint

* fix clang-format issue

* fix clang-format by adding 'clang-format off'

* remove useless casts

* remove 'data' argument of 'operator()'

* change 'Tensor2Img' to 'TensorToImg' according to spec

* correct tensor's name according spec

Co-authored-by: lvhan028 <lvhan_028@163.com>
2021-12-16 13:51:22 +08:00
Yifan Zhou 78b37bbd32
[Fix]: Fix rewriter conflict when processing derived class (#289)
* Fix rewriter

* lint

* rename function and update docstring

* use is class

* Update docstring
2021-12-14 15:40:29 +08:00
AllentDan 0dea300714
[Fix] Reanme ppl to pplnn for all cases (#273)
* add speed benchmark for pplnn and replace all ppl in docs with pplnn

* replace ppl with pplnn for all codes

* docs zh

* fix crnn config path

* update docstring

* rename

* update ppl to pplnn in readme_zh

Co-authored-by: maningsheng <mnsheng@yeah.net>
2021-12-14 15:04:39 +08:00
RunningLeon 0b23c744fc
remove trt in config (#280) 2021-12-13 19:57:15 +08:00
Semyon Bevzyuk a96e5f9d76
[Fix] Fix VFNet test (#281)
* [Fix] fix bugs for mmcls performance test (#269)

* fix bugs for mmcls performance test

* fix yapf

* add comments of CLASSES attribute

* Fix test_get_bboxes_of_vfnet_head

* Fix

Co-authored-by: hanrui1sensetime <83800577+hanrui1sensetime@users.noreply.github.com>
2021-12-13 10:43:39 +08:00
VVsssssk 54885e5972
【Feature】Support for mmdet2.19 (#253)
* add one-stage support

* add two-stage support

* fix docstring

* add base_dense_head docstring

* fix docstrign

* fix ncnn code

* fix anchor head

* fix unit test about mmdet model

* fix unit test

* fix base dense head bug:

* fix basehead

* fix basedense head

* fix pad bug

* fix bboxhead

* add rewrite about decode

* fix decode

* rename func

* fix test_mmdet_core and test_object_detection_model

* format test

* fix comments

* remove to(device)

* fix requirements

* fix docs

* fix yolox evaluate butg
2021-12-10 14:03:23 +08:00
Yifan Zhou 4149228716
[Enhancement]: Import codebase only when it is required (#266)
* Add import codebase

* lint

* Fix import order

* typo

* Fix partition

* docstring

* lint
2021-12-10 11:34:22 +08:00
Semyon Bevzyuk 3659b515eb
[Enhancement]: The ability to sort the dataset in tools/test.py. (#244)
* Add sort-data arg to test.py

* Set is_sort_dataset to True.

* Add a check for the possibility of sorting.

* lint

* Added mmdeploy.utils.dataset.

* Add unit test

Co-authored-by: SingleZombie <singlezombie@163.com>
2021-12-09 16:21:50 +08:00
RunningLeon c213879103
fix yolov3 head test with ncnn (#267)
* fix yolov3 head test with ncnn

* add ncnn test

* remove ncnn test
2021-12-09 11:56:12 +08:00
hanrui1sensetime 30af457b5e
[Feature] Support mobilenetv2ssdlite ncnn end2end deployment. (#259)
* support ssdlitemobilenetv2

* fix yapf

* fix ut try

* fix ut try

* try to fix ut

* fix ut general 320->128

* move onnx ops to mmcv

* fix lint

* fix docformatter

* increase doc coverage

* refact self defined ops

* fix yapf

* add description

* fix isort

* fix comments

* fix comments

* fix lint

* sigmoid after concat
2021-12-09 11:55:38 +08:00
RunningLeon d96ee9e9f3
Change op domain (#262)
* change domain to mmdeploy

* update tests

* resolve comments
2021-12-08 15:06:41 +08:00
Yifan Zhou 03c95a1149
[Enhancement]: Optimize config utils (#263)
* Optimize config utils

* Update `get_backend`

* Add assert
2021-12-08 14:55:59 +08:00
lvhan028 36124f6205
Merge sdk (#251)
* check in cmake

* move backend_ops to csrc/backend_ops

* check in preprocess, model, some codebase and their c-apis

* check in CMakeLists.txt

* check in parts of test_csrc

* commit everything else

* add readme

* update core's BUILD_INTERFACE directory

* skip codespell on third_party

* update trt_net and ort_net's CMakeLists

* ignore clion's build directory

* check in pybind11

* add onnx.proto. Remove MMDeploy's dependency on ncnn's source code

* export MMDeployTargets only when MMDEPLOY_BUILD_SDK is ON

* remove useless message

* target include directory is wrong

* change target name from mmdeploy_ppl_net to mmdeploy_pplnn_net

* skip install directory

* update project's cmake

* remove useless code

* set CMAKE_BUILD_TYPE to Release by force if it isn't set by user

* update custom ops CMakeLists

* pass object target's source lists

* fix lint end-of-file

* fix lint: trailing whitespace

* fix codespell hook

* remove bicubic_interpolate to csrc/backend_ops/

* set MMDEPLOY_BUILD_SDK OFF

* change custom ops build command

* add spdlog installation command

* update docs on how to checkout pybind11

* move bicubic_interpolate to backend_ops/tensorrt directory

* remove useless code

* correct cmake

* fix typo

* fix typo

* fix install directory

* correct sdk's readme

* set cub dir when cuda version < 11.0

* change directory where clang-format will apply to

* fix build command

* add .clang-format

* change clang-format style from google to file

* reformat csrc/backend_ops

* format sdk's code

* turn off clang-format for some files

* add -Xcompiler=-fno-gnu-unique

* fix trt topk initialize

* check in config for sdk demo

* update cmake script and csrc's readme

* correct config's path

* add cuda include directory, otherwise compile failed in case of tensorrt8.2

* clang-format onnx2ncnn.cpp

Co-authored-by: zhangli <lzhang329@gmail.com>
Co-authored-by: grimoire <yaoqian@sensetime.com>
2021-12-07 10:57:55 +08:00
RunningLeon 9e82851a73
[Feature] end2end yolov3 with ncnn (#248)
* support yolov3 ncnn with Yolov3DetectionOutput

* update nms

* fix contiguous in ncnn wrapper

* remove padding to detectionoutput

* format cpp

* Revert "format cpp"

This reverts commit 54050b19cd80d2f8cd851d82a755fd2c8d6c779d.

* fix zero detection

* fix yapf

* onnx2ncnn.cpp

* fix ut

* fix isort

* fix clang-format

* format cpp

* resolve comments

* resolve comments

* fix ut of ncnnend2endmodel

* fix yapf

* fix return list;

Co-authored-by: hanrui1sensetime <hanrui1@sensetime.com>
2021-12-06 19:01:36 +08:00
Yifan Zhou cc72c00e61
[Fix]: Fix homonymic rewriters bugs (#242)
* Fix bug

* license
2021-12-03 18:31:58 +08:00
AllentDan 66d5cddbdc
[Enhancement] Add bicubic resize plugin for tensorrt (#238)
* save codes

* enable export fake bicubic interpolate op to onnx

* save codes

* enable bicubic interpolate trt plugin

* static export

* enable visualize but need align acc

* use torch bicubic upsample

* add unit tests for bicubic interpolate

* fix unit tests

* change mmedit config

* remove useless comments

* remove useless comments

* resolve comments

* fix lint

* clang-format

Co-authored-by: grimoire <yaoqian@sensetime.com>
2021-12-01 16:31:10 +08:00
RunningLeon 3b97f64385
Support YOLOX with TensorRT (#237)
* support trt

* fix test
2021-12-01 15:21:55 +08:00
Semyon Bevzyuk bb9b0a98de
[Enhancement]: Added static config and CI tests for OpenVINO. (#218)
* Add openvino_static.

* Add openvino-dev.

* Fix skipping ORT tests in test_mmocr_models.

* Updated docs.

* Fix print.

* Fix

* Fix

* Fix other backends

* Fix is_available

* fix ncnn

* Add constrict for get rewrite output

* add not

* Fix

* fix

* Fix

* Fix

* Improve tests

* Remove rebundant `cuda`

* Prevent None object and rename variable

* Fix multi-line string

* rename get_backend_checker

* Add Troubleshooting to doc.

* Fix postprocessing_masks with empty masks.

* Fix tests

* lint

* Update docs.

Co-authored-by: SingleZombie <singlezombie@163.com>
2021-12-01 14:03:48 +08:00
Yifan Zhou 4fc0e79b4e
[Enhancement]: Refine backend environment check and fix online unit test (#239)
* Fix

* Fix other backends

* Fix is_available

* fix ncnn

* Add constrict for get rewrite output

* add not

* Fix

* fix

* Fix

* Fix

* Improve tests

* Remove rebundant `cuda`

* Prevent None object and rename variable

* Fix multi-line string

* rename get_backend_checker

* Fix tests

* lint

* docstring
2021-12-01 10:19:11 +08:00
q.yao a8abc75065
Add licence head to code (#236) 2021-11-30 15:00:37 +08:00
AllentDan d0bb497b0c
[Fix] fix ncnn apis, add onnx2ncnn unit tests, and rename test_mmseg/test_utils.py to avoid conflicts (#233)
* refactor ncnn convert

* refine docstring

* add onnx2ncnn test

* resolve comments and rename test_utils.py in test_mmseg

Co-authored-by: maningsheng <mnsheng@yeah.net>
2021-11-26 11:43:27 +08:00
Yifan Zhou eab6d76838
Fix test (#234) 2021-11-25 19:41:31 +08:00
VVsssssk 58993ccd63
[Fix]Fix utils test (#232)
* fix apis unit test

* remove tmp file

* delete test/test_mmedit and tests/test_mmseg
 Please enter the commit message for your changes. Lines starting

* fix device to cpu

* fix tests/test_utils

* rename test_util
2021-11-25 19:41:21 +08:00
VVsssssk 8a3e5e0464
【Fix】Fix apis unit test (#231)
* fix apis unit test

* remove tmp file

* delete test/test_mmedit and tests/test_mmseg
 Please enter the commit message for your changes. Lines starting

* fix device to cpu
2021-11-25 18:48:52 +08:00
hanrui1sensetime cab362a248
[Unittest] mmcls fix ut (#228)
* mmcls fix ut

* force add data folder

* remove debug info

* fix ut bugs
2021-11-25 18:48:11 +08:00
AllentDan 8c95bede4c
[Refactor] refactor mmocr unit tests (#227)
* refactor mmocr unit tests

* fix unit tests

* resolve comments
2021-11-25 18:11:24 +08:00
VVsssssk ed70afedcd
[Fix] Fix ops unit test (#225)
* fix tensorrt and onnxrt ops unit test

* fix ncnn unit test
2021-11-25 17:06:08 +08:00
q.yao 3a785f1223
[Refactor] Refactor codebase (#220)
* [WIP] Refactor v2.0 (#163)

* Refactor backend wrapper

* Refactor mmdet.inference

* Fix

* merge

* refactor utils

* Use deployer and deploy_model to manage pipeline

* Resolve comments

* Add a real inference api function

* rename wrappers

* Set execute to private method

* Rename deployer deploy_model

* Refactor task

* remove type hint

* lint

* Resolve comments

* resolve comments

* lint

* docstring

* [Fix]: Fix bugs in details in refactor branch (#192)

* [WIP] Refactor v2.0 (#163)

* Refactor backend wrapper

* Refactor mmdet.inference

* Fix

* merge

* refactor utils

* Use deployer and deploy_model to manage pipeline

* Resolve comments

* Add a real inference api function

* rename wrappers

* Set execute to private method

* Rename deployer deploy_model

* Refactor task

* remove type hint

* lint

* Resolve comments

* resolve comments

* lint

* docstring

* Fix errors

* lint

* resolve comments

* fix bugs

* conflict

* lint and typo

* Resolve comment

* refactor mmseg (#201)

* support mmseg

* fix docstring

* fix docstring

* [Refactor]: Get the count of backend files (#202)

* Fix backend files

* resolve comments

* lint

* Fix ncnn

* [Refactor]: Refactor folders of mmdet (#200)

* Move folders

* lint

* test object detection model

* lint

* reset changes

* fix openvino

* resolve comments

* __init__.py

* Fix path

* [Refactor]: move mmseg (#206)

* [Refactor]: Refactor mmedit (#205)

* feature mmedit

* edit2.0

* edit

* refactor mmedit

* fix __init__.py

* fix __init__

* fix formai

* fix comment

* fix comment

* Fix wrong func_name of ConvFCBBoxHead (#209)

* [Refactor]: Refactor mmdet unit test (#207)

* Move folders

* lint

* test object detection model

* lint

* WIP

* remove print

* finish unit test

* Fix tests

* resolve comments

* Add mask test

* lint

* resolve comments

* Refine cfg file

* Move files

* add files

* Fix path

* [Unittest]: Refine the unit tests in mmdet #214

* [Refactor] refactor mmocr to mmdeploy/codebase (#213)

* refactor mmocr to mmdeploy/codebase

* fix docstring of show_result

* fix docstring of visualize

* refine docstring

* replace print with logging

* refince codes

* resolve comments

* resolve comments

* [Refactor]: mmseg  tests (#210)

* refactor mmseg tests

* rename test_codebase

* update

* add model.py

* fix

* [Refactor] Refactor mmcls and the package (#217)

* refactor mmcls

* fix yapf

* fix isort

* refactor-mmcls-package

* fix print to logging

* fix docstrings according to others comments

* fix comments

* fix comments

* fix allentdans comment in pr215

* remove mmocr init

* [Refactor] Refactor mmedit tests (#212)

* feature mmedit

* edit2.0

* edit

* refactor mmedit

* fix __init__.py

* fix __init__

* fix formai

* fix comment

* fix comment

* buff

* edit test and code refactor

* refactor dir

* refactor tests/mmedit

* fix docstring

* add test coverage

* fix lint

* fix comment

* fix comment

* Update typehint (#216)

* update type hint

* update docstring

* update

* remove file

* fix ppl

* Refine get_predefined_partition_cfg

* fix tensorrt version > 8

* move parse_cuda_device_id to device.py

* Fix cascade

* onnx2ncnn docstring

Co-authored-by: Yifan Zhou <singlezombie@163.com>
Co-authored-by: RunningLeon <maningsheng@sensetime.com>
Co-authored-by: VVsssssk <88368822+VVsssssk@users.noreply.github.com>
Co-authored-by: AllentDan <41138331+AllentDan@users.noreply.github.com>
Co-authored-by: hanrui1sensetime <83800577+hanrui1sensetime@users.noreply.github.com>
2021-11-25 09:57:05 +08:00
AllentDan a4dceb4bb4
[Enhancement] Enhance ppl for all codebases (#177)
* enhance ppl for all codebases

* fix dump info

* fix md and use not None

* remove redundant codes

* safe convert empty ppl tensor

* add examples and remove useless lines
2021-11-16 19:16:46 +08:00
Semyon Bevzyuk 49dd1cf678
[Enhancement]: Support VFNet from MMDetection for OpenVINO and ONNX Runtime. (#195)
* Add deform_conv_openvino.

* Add get_bboxes_of_vfnet_head.

* Fix vfnet and add test_get_bboxes_of_vfnet_head.

* Update docs.

* Fix test_shufflenetv2_backbone__forward for openvino.

* Fixes.
2021-11-16 10:59:59 +08:00
Semyon Bevzyuk c599ed5904
[Enhancement]: Support YOLOX from MMDetection for OpenVINO and ONNX Runtime. (#190)
* Add get_bboxes_of_yolox_head.

* Add test_yolox_head_get_bboxes.

* Update docs.
2021-11-12 10:39:42 +08:00
hanrui1sensetime a35fb3ddd1
[Feature]: Support shufflenet_v2 for NCNN (#183)
* support shufflenet_v2

* fix yapf

* fix lint

* reply comments

* fix docformatter

* reply comment

* fix lint

* fix ut

* fix yapf
2021-11-10 20:14:31 +08:00
VVsssssk c05a839cfe
[FIX]fix with_mask to instance_seg (#181)
* fix with_mask to instance_seg

* fix instance_cfg to instance-cfg
2021-11-09 17:45:05 +08:00
RunningLeon cd51f12f32
[Feature]: Support yolov3 (#167)
* support yolov3 with ort and trt

* add ncnn compare

* fix yolo_head ncnn rewriter

* align perforance with ort trt for yolov3

* update doc

* add test for compare with equal,less, greater

* change namespace

* reformat cpp

* fix lint

* fix lint

* add unit test for yolov3 head

* remove compare op

* update doc

* update table format in docs

* update comments

* update

Co-authored-by: hanrui1sensetime <hanrui1@sensetime.com>
2021-11-08 16:07:58 +08:00
Semyon Bevzyuk ca93007035
[Enhancement]: Support FoveaBox and ATSS from mmdetection for OpenVINO and ONNX Runtime (#160)
* Add FoveaHead and AtssHead.

* Update docs.

* Fix typos and docstrings.

* Fixes.

* Fix img_metas type in docstring.
2021-11-05 17:45:49 +08:00
Semyon Bevzyuk c52b24c67f
[Enhancement]: Added support for masks in OpenVINO. (#148)
* Fix include and lib paths for onnxruntime.

* Fixes for SSD export test

* Add onnx2openvino and OpenVINODetector. Test models: ssd, retinanet, fcos, fsaf.

* Add support for two-stage models: faster_rcnn, cascade_rcnn

* Add doc

* Add strip_doc_string for openvino.

* Fix openvino preprocess.

* Add OpenVINO to test_wrapper.py.

* Fix

* Add openvino_execute.

* Removed preprocessing.

* Fix onnxruntime cmake.

* Rewrote postprocessing and forward, added docstrings and fixes.

* Added device type change to OpenVINOWrapper.

* Update forward_of_single_roi_extractor_dynamic_openvino and fix doc.

* Update docs.

* Add support for masks (Mask RCNN).

* Add masks to CascadeRoIHead.simple_test.

* Added masks to test_OpenVINODetector.

* Added test_cascade_roi_head_with_mask.

* Update docs.

* Fix segm_results shape.

* Fix TopK in NMS and add test_multiclass_nms_with_keep_top_k.

* Removed unnecessary functions.

* Fix.

* Fix test_multiclass_nms_with_keep_top_k.

* Updated test_OpenVINODetector.
2021-11-03 10:27:48 +08:00
Yifan Zhou 227bebaade
[Enhancement]: Rename files in mmdeploy/core/rewriters (#157)
* Rename files

* lint

* update docstring
2021-10-27 15:12:00 +08:00
AllentDan 77131ea071
[Feature] Add exporting SARNet to onnxruntime backends. (#134)
* save codes

* save codes

* support sar exporting to onnxruntime and tensorrt

* use 4G max gpu space

* support sequential sar

* remove trt config for sar

* add sar unit tests

* add sar unit tests

* resolve conflicts

* remove torch.add rewrite in unit tests
2021-10-26 15:42:06 +08:00
Yifan Zhou 398bf2b386
[Refactor]: Refactor mmdeploy/core (#140)
* refactor function rewriter

* Pass unit test

* Fix test

* Fix test

* lint

* refactor function rewriter

* Pass unit test

* Fix test

* Fix test

* lint

* support openvino

* update

1. All type hints of cfg are set to Dict
2. Check if kwargs exist when calling patch_model
3. Complement tests
4. key name 'object' is set to '_object'

* lint

* Update docstring

* Fix tests

* Improve test
2021-10-26 10:30:14 +08:00
AllentDan 35b7341766
fix mmocr (#147) 2021-10-25 19:09:28 +08:00
Semyon Bevzyuk ba7ae81d3e
[Unittest]: Test for CascadeRoIHead (#141)
* Fix include and lib paths for onnxruntime.

* Fixes for SSD export test

* Add onnx2openvino and OpenVINODetector. Test models: ssd, retinanet, fcos, fsaf.

* Add support for two-stage models: faster_rcnn, cascade_rcnn

* Add doc

* Add strip_doc_string for openvino.

* Fix openvino preprocess.

* Add OpenVINO to test_wrapper.py.

* Fix

* Add openvino_execute.

* Removed preprocessing.

* Fix onnxruntime cmake.

* Rewrote postprocessing and forward, added docstrings and fixes.

* Added device type change to OpenVINOWrapper.

* Update forward_of_single_roi_extractor_dynamic_openvino and fix doc.

* Update docs.

* Add OpenVINODetector and onn2openvino tests.

* Add input_info to onnx2openvino.

* Add TestOpenVINOExporter and test_single_roi_extractor.

* Moved get_input_shape_from_cfg to openvino_utils.py and added test.

* Added test_cascade_roi_head.

* Add backend.check_env() to tests.

* Add OpenVINO to get_rewrite_outputs and to some tests in test_mmdet_models.

* Moved test_single_roi_extractor to test_mmdet_models.

* Removed TestOpenVINOExporter.

* Added test_cascade_roi_head.

* Fix onnxruntime outputs type.
2021-10-25 15:13:09 +08:00