{"id":23102632,"url":"https://github.com/dataxujing/lanenet-tensorrt","last_synced_at":"2025-09-05T07:30:57.951Z","repository":{"id":112305543,"uuid":"463097172","full_name":"DataXujing/lanenet-tensorrt","owner":"DataXujing","description":":fire: :fire: :fire: 车道线检测Lanenet TensorRT加速C++实现","archived":false,"fork":false,"pushed_at":"2022-02-24T10:23:47.000Z","size":469,"stargazers_count":21,"open_issues_count":1,"forks_count":6,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-04T13:22:47.269Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DataXujing.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2022-02-24T10:04:53.000Z","updated_at":"2025-01-23T02:36:19.000Z","dependencies_parsed_at":"2023-05-12T18:00:20.904Z","dependency_job_id":null,"html_url":"https://github.com/DataXujing/lanenet-tensorrt","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/DataXujing/lanenet-tensorrt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataXujing%2Flanenet-tensorrt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataXujing%2Flanenet-tensorrt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataXujing%2Flanenet-tensorrt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataXujing%2Flanenet-tensorrt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DataXujing","download_url":"https://codeload.github.com/DataXujing/lanenet-tensorrt/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataXujing%2Flanenet-tensorrt/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267644718,"owners_count":24120866,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-29T02:00:12.549Z","response_time":2574,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-17T00:00:06.975Z","updated_at":"2025-07-29T07:07:09.775Z","avatar_url":"https://github.com/DataXujing.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 车道线检测模型LaneNet TensorRT加速\n\n徐静\n\n### 1.下载模型配置环境\n\n1. 在官网下载预训练的模型，backbone为bisenetV2\n\n2. 创建虚拟环境安装必要的包，因为tensorflow只作为测试我们预安装tensorflow而非tensorflow-gpu\n\n   ```shell\n   conda create -n tf15 python=3.7\n   conda activate tf15\n   pip install -r rqwuirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple\n   ```\n\n\n3. TensorRT 8.2.1.8\n\n4. VS 2017\n\n### 2.Tensorflow 2 TensorRT\n\n鄙人研究发现，LaneNet 的TensorRT加速目前没有开源的C++实现，没有相关源码参考，需要自己搞了。特别是LaneNet项目时不时的会有更新，即使有相关参考项目也是比较老的版本，无法适应新的环境。\n\n#1.冻结Tf图的变量\n\n```shell\n#需要找到input和output的结点然后冻结图\n# 进入到lanenet的项目下，执行tools下的print_graph.py\n\nconda activate tf15\npython tools/print_graph.py\n# 可以把网络结构存储在Tensorboad的log中，方便我们查看tf的网络节点，同时这个脚本也生成了pb文件\n\n# 也可以用下面方式生成\npython tools/freeze_graph.py\n\n# 将在项目下生成lanenet.pb的freeze graph\n```\n\n#2.使用tf2onnx工具将模型转为onnx\n\n我看有大佬有转UFF也成功了，官方已经基本废弃UFF Parser了，tf转onnx trt官方推荐使用tf2onnx,因此我们选择这条路。\n\n```shell\npython -m tf2onnx.convert -h\n\n# 方式1生成的pb转onnx\npython -m tf2onnx.convert --input ./lanenet.pb --output ./lanenet.onnx --inputs input_tensor:0 --outputs LaneNet/bisenetv2_backend/instance_seg/pix_embedding_conv/pix_embedding_conv:0,LaneNet/bisenetv2_backend/binary_seg/ArgMax:0 --opset 11\n\n# 成功在项目下生成lanenet.onnx\n\n# 方式2生成的pb转onnx\npython -m tf2onnx.convert --input ./lanenet.pb --output ./lanenet.onnx --inputs lanenet/input_tensor:0 --outputs lanenet/final_binary_output:0,lanenet/final_pixel_embedding_output:0 --opset 11\n\n```\n\n#3.ONNX序列化Engine\n\n```shell\ntrtexec --onnx=lanenet.onnx --saveEngine=lanenet.engine --verbose\n```\n\n#4.恭喜你成功了！\n\n在TensorRT-8.2.1.8/bin下生成了`lanenet.engine` 恭喜你，序列化engine成功了！！！\n\n### 3.LaneNet TensorRT C++模型加速代码实现\n\n+ 找到了网上聚类算法的开源实现:https://github.com/CallmeNezha/SimpleDBSCAN\n+ 后处理部分参考了LaneNet MNN实现的一些代码，并做了重构: https://github.com/MaybeShewill-CV/MNN-LaneNet\n+ TensorRT可以正常推断，后处理结果正确！！！\n\n### 4.Demo\n\n原图：\n\n![](docs/3.jpg)\n\n二值化mask:\n\n![](docs/binary_ret.png)\n\n车道线实例分割结果：\n\n![](docs/instance_ret.png)\n\n结果放在原图中：\n\n![](docs/res.jpg)\n\n\n\n### 5.TODO\n\n[ ] 优化DBscan基于密度的聚类算法，使之更快！！！\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdataxujing%2Flanenet-tensorrt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdataxujing%2Flanenet-tensorrt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdataxujing%2Flanenet-tensorrt/lists"}