龙芯2k0300 - 智能车走马观碑组目标分类算法
回到顶部一、目录分层规则1.1 统一目录结构tb_cls采用单一目标板分类工程结构配置、真实数据、模型和输出都直接放在根目录对应位置├── configs │ ├── README.md │ └── labels.txt ├── dataset │ ├── dataset.zip │ ├── supplies │ ├── vechicle │ └── weapon ├── models │ ├── README.md │ ├── best.bin │ ├── best.param │ ├── best.torchscript │ ├── best_model.pt │ ├── labels.txt │ └── metrics.json ├── outputs │ └── traintb_cls的标签来自文件夹名数据目录是ImageFolder结构。当前三类目录为dataset/ ├── supplies/ ├── vechicle/ └── weapon/类别顺序由torchvision.datasets.ImageFolder按文件夹名字典序生成训练结束后会写入labels.txt。当前labels.txt顺序为supplies vechicle weapon车端解析分类结果时必须使用同一份labels.txt。其中vechicle对应交通工具类。当前仓库中已有模型可能仍带有旧版labels.txt以重新训练后生成的models/labels.txt和configs/labels.txt为准。仓库提交时只需要保留dataset/dataset.zip解压后的图片目录由.gitignore忽略。训练脚本会在发现三类图片目录不存在时自动解压dataset/dataset.zip。回到顶部二、环境准备和已有模型2.1 Linux/WSL 训练环境requirements.txt是从conda env: loong导出的固定版本依赖建议使用Python 3.10的独立环境。不要直接使用系统自带的Python 3.14安装本文件因为numpy、torch等固定版本可能没有对应兼容包。如果系统还没有conda先安装Miniforgecd /tmp wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh bash Miniforge3-Linux-x86_64.sh -b -p $HOME/miniforge3 eval $($HOME/miniforge3/bin/conda shell.bash hook) conda init bash执行conda init bash后重新打开一个终端或者执行source ~/.bashrc如果安装后当前终端仍提示Command conda not found说明当前 shell 还没有加载conda先执行eval $($HOME/miniforge3/bin/conda shell.bash hook) conda --version确认能看到conda版本号后再继续创建环境。如果wget不存在先安装sudo apt update sudo apt install -y wget创建并进入loong环境conda create -n loong python3.10 conda activate loong cd /opt/2k0300/loongson_2k300_lib/tb_cls python -m pip install -r requirements.txtrequirements.txt已固定使用CUDA 12.8版PyTorchtorch2.11.0cu128 torchvision0.26.0cu128如果只做ncnn导出还需要额外安装pnnxpython -m pip install pnnx验证PyTorch环境python -c import torch, torchvision; print(torch.__version__); print(torchvision.__version__); print(torch.cuda.is_available())Linux/WSL没有配置NVIDIA GPU时输出False也可以训练只是会使用CPU。2.2 已有模型位置当前仓库只保留真实目标板分类数据dataset/下的数据就是后续训练使用的ImageFolder数据集。数据按三大类放置不需要目标框标注。已经训练或转换好的模型统一归档在models/best_model.pt models/best.torchscript models/best.param models/best.bin models/labels.txtconfigs/labels.txt是同一份类别顺序文件车端推理显示类别时必须按该顺序解析输出。回到顶部三、真实目标板数据集3.1 数据内容当前dataset/目录下的数据就是真实目标板数据。图片内容来自赛道中心目标板按业务含义分成三个大类当前训练集已经整理为64x64图片。weapon 武器枪支、爆炸物、匕首、警棍、消防斧 supplies 物资急救包、手电筒、对讲机、防弹背心、望远镜、头盔 vechicle 交通工具消防车、救护车、装甲车、摩托车所有图片都是无框图片不包含检测框标注。训练时只使用图片所在的大类文件夹作为分类标签不区分大类内部的小类编号。大类目录下的图片已经平铺文件名只作为样本编号不参与标签解析。3.2 输入边界TinyClassifier只做整图分类不做检测框定位。用于智能车目标板时建议输入已经裁剪好的目标板ROI而不是整张赛道图。可选裁剪方式目标板出现在固定区域时直接从摄像头画面裁剪固定ROI。目标板位置有轻微变化时先用颜色、边缘或几何规则定位候选区域再送入分类模型。如果目标板位置完全不稳定需要额外实现轻量定位或裁剪逻辑。3.3 数据目录当前压缩包解压后按三大类建立文件夹dataset/ ├── dataset.zip ├── supplies/ ├── vechicle/ └── weapon/如果提交仓库保留dataset/dataset.zip不要提交解压后的dataset/supplies/、dataset/vechicle/、dataset/weapon/图片目录。运行训练脚本时会自动检查并解压。回到顶部四、训练和导出4.1 模型结构TinyClassifier是轻量级卷积分类网络主体由普通卷积、深度可分离卷积、全局池化和全连接分类头组成。当前计划使用64x64输入训练输出类别数由dataset/下的三类目录自动决定。网络结构概览输入 1x3x64x64 Conv3x3 stride2 BN ReLU DWConvBlock stride1 DWConvBlock stride2 DWConvBlock stride1 DWConvBlock stride2 DWConvBlock stride1 Conv1x1 BN ReLU AdaptiveAvgPool2d(1) Linear(num_classes) 输出 1x3 logitsDWConvBlock内部结构为Depthwise Conv3x3 BN ReLU Pointwise Conv1x1 BN ReLU通道数由--width-mult控制默认0.6。基础通道序列为12 - 16 - 24 - 32 - 48 - 48 - 64实际通道数会乘以width_mult并保证最小通道数不低于8。增大width_mult会提高模型容量和计算量减小它会让模型更小但可能降低准确率。训练时使用AdamW优化器、CrossEntropyLoss损失函数和CosineAnnealingLR学习率调度。数据集按类别内随机划分为80%训练集、10%验证集、剩余10%测试集。训练增强包括Resize(64x64) RandomHorizontalFlip RandomRotation(10) ColorJitter ImageNet Normalize验证、测试和导出推理只使用Resize、ToTensor和ImageNet Normalize。4.2 训练并归档模型4.2.1 WSL/Linux GPU/CPU 训练WSL/Linux中可运行./scripts/train_classifier_host.sh --run-name exp_cls_64 --img-size 64常用参数示例./scripts/train_classifier_host.sh \ --run-name exp_cls_64 \ --img-size 64 \ --batch-size 64 \ --epochs 35 \ --width-mult 0.6 \ --target-acc 0.95训练源码会自动选择设备torch.cuda.is_available()为真时使用cuda否则使用cpu。首次从压缩包训练时脚本会先自动解压数据集再开始训练。正常日志示例[cls-train] Dataset class folders not found; extracting .../tb_cls/dataset/dataset.zip [cls-train] Python: python [cls-train] Dataset: .../tb_cls/dataset Using device: cuda Classes: [supplies, vechicle, weapon]4.2.2 训练输出训练输出先写入outputs/train/实验名/随后脚本会把关键产物复制到models/训练结束后原始输出位于outputs/train/实验名/ ├── best_model.pt ├── tiny_classifier.torchscript ├── labels.txt └── metrics.json包装脚本会把关键产物同步到models/best_model.pt models/best.torchscript models/labels.txt models/metrics.json configs/labels.txt4.2.3 训练脚本参数参数默认值说明--data-root DIRdatasetImageFolder数据集根目录。默认目录缺少三类文件夹时会自动解压dataset/dataset.zip。--run-name NAMEexp_cls实验名默认输出到outputs/train/实验名/。--out-dir DIRoutputs/train/实验名显式指定训练输出目录。--img-size N64输入图片尺寸。当前64x64数据训练时使用64训练、导出和板端推理必须保持一致。--batch-size N64批大小。显存不足或内存不足时调小。--epochs N35最大训练轮数。可能因达到目标准确率或早停提前结束。--lr VALUE1e-3AdamW初始学习率。--weight-decay V2e-4权重衰减系数。--num-workers N0数据加载线程数。WSL/Linux 可按机器性能调大。--seed N42数据划分和训练随机种子。--width-mult VALUE0.6网络宽度倍率控制通道数和参数量。--patience N8验证准确率连续N轮不提升时早停。--target-acc VALUE0.95验证准确率达到该值后提前停止训练。--python FILEpython3Linux/WSL训练脚本使用的Python可执行文件。4.3 本地验证单张图片识别结果训练结束并归档到models/后可以先在主机上拿一张图片做单图识别确认模型、标签顺序和预处理尺寸是否一致python vendor/lq_tiny_classifier/predict_image.py \ --checkpoint models/best_model.pt \ --image dataset/supplies/000001.jpg \ --img-size 64输出示例image: dataset/supplies/000001.jpg prediction: supplies (0.9821) topk: supplies: 0.9821 weapon: 0.0113 vechicle: 0.0066如果要验证其他类别替换--image即可例如python vendor/lq_tiny_classifier/predict_image.py \ --checkpoint models/best_model.pt \ --image dataset/weapon/000001.jpg \ --img-size 64这里使用的是训练 checkpointbest_model.pt预处理与训练/测试一致Resize(64x64)、ToTensor和ImageNet Normalize。如果单图预测类别明显不对优先检查三点图片是否来自正确的大类目录、--img-size是否和训练一致、models/labels.txt是否为本次训练生成。4.4 导出ncnn模型WSL/Linux主机中使用pnnx从TinyClassifier训练脚本导出的TorchScript转为ncnn./scripts/export_ncnn_host.sh --torchscript models/best.torchscript --img-size 64输出文件为models/best.param models/best.bin需要带到开发板的文件models/best.param models/best.bin models/labels.txt导出脚本参数参数默认值说明--torchscript FILEmodels/best.torchscript主部署链路使用的TorchScript模型。--param FILE模型同目录best.param输出的ncnn结构文件。--bin FILE模型同目录best.bin输出的ncnn权重文件。--img-size N64pnnx输入尺寸必须与训练时的--img-size一致。当前64x64模型导出时使用64。--pnnx FILEPATH中的pnnx指定pnnx可执行文件路径。--fp16 0104.5 输入输出约定当前64x64训练方案的输入尺寸为1x3x64x64图像预处理使用ImageNet归一化参数mean [0.485, 0.456, 0.406] std [0.229, 0.224, 0.225]输出是一维分类logits车端需要对输出做softmax或直接取最大logit对应类别。回到顶部五、板端验证和接入5.1 板端ncnn库配置当前仓库的板端验证脚本会自动处理ncnn运行库不需要手动修改开发板系统库配置。example/build_deploy_run.sh在运行classifier_ncnn_app时会1. 从 cross_lib/ncnn/lib 查找 libncnn.so* 2. 上传到开发板 /usr/local/ncnn/lib 3. 在远端创建 libncnn.so 和 libncnn.so.1 软链接 4. 运行程序前设置 LD_LIBRARY_PATH/usr/local/ncnn/lib如果本机ncnn库目录不是默认位置可以通过参数指定cd ../example ./build_deploy_run.sh --app classifier_ncnn_app \ --ncnn-lib-dir ../cross_lib/ncnn/lib \ --remote-ncnn-lib-dir /usr/local/ncnn/lib -- \ --param best.param --bin best.bin --labels labels.txt --image test.jpg --output result.jpg如果仍遇到libncnn.so.1: cannot open shared object file优先检查--ncnn-lib-dir是否指向包含libncnn.so*的目录以及远端运行命令是否由build_deploy_run.sh启动。5.2 板端验证分类模型使用example/classifier_ncnn_app在久久派上验证真实目标板分类模型cd ../example ./build_deploy_run.sh --app classifier_ncnn_app -- \ --param best.param --bin best.bin --labels labels.txt --image test.jpg --output result.jpg脚本会自动上传tb_cls/models/best.param tb_cls/models/best.bin tb_cls/models/labels.txt tb_cls/dataset 下第一张图片如果需要指定测试图请显式传入--cls-image./build_deploy_run.sh --app classifier_ncnn_app --cls-image ../tb_cls/dataset/supplies/xxx.jpg -- \ --param best.param --bin best.bin --labels labels.txt --image test.jpg --output result.jpg5.3 接入车端策略车模通过识别赛道中心目标板内容选择通过方式。车端推理应保持和训练一致的预处理BGR/RGB通道顺序与实现保持一致。resize到64x64。按ImageNet均值和方差归一化。ncnn前向推理。对输出logits取最大值或做softmax后取最大概率。分类结果到通行策略的映射为weapon 左侧绕行 supplies 右侧绕行 vechicle 直行压过分类结果不要单帧直接控制车辆走向。建议使用连续多帧投票或置信度保持机制连续N帧类别一致才触发动作。分类置信度低于阈值时保持上一状态或忽略。只在目标板可能出现的赛段启用分类推理。回到顶部六、来源和许可证训练代码来自龙邱资料包中的LQ_TinyClassifier-master原始源码声明为GPL-3.0-or-later。本子项目保留了原始许可证tb_cls/vendor/lq_tiny_classifier/LICENSE训练、评估源码位于tb_cls/vendor/lq_tiny_classifier/原始资料包中的Windows一键脚本未作为工程入口保留当前统一使用scripts/下的包装脚本执行训练和模型转换避免与本工程的目录结构混淆。数据集批处理工具位于tb_cls/tools/photo_maker/本次迁移没有拷贝资料包中的Windowspnnx.exe、样例AprilTag图片和PDF手册只保留训练、评估、转换所需的源码、真实目标板数

相关新闻

MNIST 数据集 3 种主流框架加载对比:PyTorch vs TensorFlow vs Hugging Face Datasets

MNIST 数据集 3 种主流框架加载对比:PyTorch vs TensorFlow vs Hugging Face Datasets

MNIST 数据集 3 种主流框架加载对比:PyTorch vs TensorFlow vs Hugging Face DatasetsMNIST 数据集作为机器学习领域的经典入门资源,其加载方式在不同框架中存在显著差异。本文将深入对比 PyTorch、TensorFlow 和 Hugging Face Datasets 三大框架在数据加…

2026/7/6 4:09:21阅读更多 →
湿地生态好不好,不能只看绿不绿

湿地生态好不好,不能只看绿不绿

湿地体检不能只看绿不绿:WEI如何读懂黄河三角洲的生态完整性湿地体检不能只看绿不绿:WEI如何读懂黄河三角洲30年生态变化?一、为什么传统生态指数在湿地里会“看走眼”?1. 只看单一指标,容易把复杂湿地看得太简单2. RS…

2026/7/6 4:09:21阅读更多 →
青少年 Python 入门 | 每天打开看一看——「暑假倒计时日历」+ 每日一句

青少年 Python 入门 | 每天打开看一看——「暑假倒计时日历」+ 每日一句

青少年 Python 入门 | 每天打开看一看——「暑假倒计时日历」 每日一句 适合人群:Python 入门(建议 4~8 年级),掌握 datetime / list / for 后 项目定位:单课时(60 分钟),成品是一个…

2026/7/6 4:09:21阅读更多 →
工业传感器控制系统核心组件与设计实践

工业传感器控制系统核心组件与设计实践

1. 工业级传感器控制系统的核心组件解析在工业自动化和嵌入式系统开发领域,构建一个稳定可靠的传感器/执行器控制系统需要精心选择每个关键组件。AD74115H、ADP1034和TM4C129XKCZAD这三款芯片的组合,恰好覆盖了信号采集、电源管理和主控计算这三个核心环…

2026/7/6 7:49:40阅读更多 →
工业自动化中的多传感器信号链设计与实现

工业自动化中的多传感器信号链设计与实现

1. 项目背景与核心组件选型在工业自动化和物联网应用中,如何高效连接多种传感器与执行器一直是系统设计的核心挑战。AD74115H、ADP1034和STM32F215ZG这套组合方案,恰好能解决多类型信号采集、电源管理和主控处理的协同问题。AD74115H是ADI公司推出的16通…

2026/7/6 7:49:40阅读更多 →
差分走线 PCB 设计 3 大误区:等长 5mil 并非越严越好(附仿真验证)

差分走线 PCB 设计 3 大误区:等长 5mil 并非越严越好(附仿真验证)

差分走线 PCB 设计的三大认知误区:从理论到实践的深度解析在高速PCB设计领域,差分走线技术已成为应对电磁干扰、提升信号完整性的关键手段。然而,随着信号速率不断攀升,工程师们在差分对设计过程中常常陷入一些技术误区&#xff0…

2026/7/6 7:49:40阅读更多 →
EMC电缆屏蔽层360°搭接实战:1cm猪尾巴导致30%辐射超标风险

EMC电缆屏蔽层360°搭接实战:1cm猪尾巴导致30%辐射超标风险

EMC电缆屏蔽层360搭接实战:1cm猪尾巴导致30%辐射超标风险引言在硬件开发与EMC测试领域,电缆屏蔽层的处理工艺往往被工程师视为"细枝末节",但正是这些看似微小的细节,可能成为产品认证路上的"隐形杀手"。想象一…

2026/7/6 7:49:40阅读更多 →
ASM330LHH IMU与PIC18F86J55在运动跟踪系统中的应用

ASM330LHH IMU与PIC18F86J55在运动跟踪系统中的应用

1. 运动跟踪技术的革新背景在当今的嵌入式系统和物联网设备中,精确的运动跟踪能力已经成为许多应用的核心需求。从消费电子产品的姿态识别到工业设备的振动监测,再到医疗设备的运动分析,6自由度(6DoF)惯性测量单元(IMU)正在改变我们与物理世界…

2026/7/6 7:49:40阅读更多 →
基于TPAFE0808与MKV42F256的多通道高精度信号采集方案

基于TPAFE0808与MKV42F256的多通道高精度信号采集方案

1. 项目背景与核心需求在工业自动化、医疗设备和精密仪器控制领域,多通道信号采集与实时系统监测一直是关键的技术挑战。传统方案往往面临通道间干扰、采样精度不足和实时性差等问题。TPAFE0808作为一款8通道高精度模数转换器(ADC),配合MKV42F256VLH16这…

2026/7/6 7:44:40阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/6 4:26:20阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/6 2:48:33阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/6 0:10:35阅读更多 →
Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 技术架构先行:官方接口的合规应用 你是否曾在BP阶段手忙脚乱&#x…

2026/7/6 0:03:39阅读更多 →
多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_m…

2026/7/6 0:03:39阅读更多 →
COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南在数据分析和处理领域,去重统计是最基础也是最频繁使用的操作之一。当数据量达到亿级规模时,不同的去重统计方法在性能上可能产生天壤之别。本文将基于 5 亿行数据的实…

2026/7/6 0:03:39阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/6 4:45:01阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/6 4:45:01阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/6 4:45:03阅读更多 →