【瑞萨AI挑战赛】#02 DL任务说明及训练

稍后同步代码到Github Repo

一、任务分析

首先明确,目标任务是在本地对驾驶行为的识别,使用驾驶行为数据集,用于后续的分析和处理,由此计划两个方案:

  • 方案一:骨架提取 -> 动作分类 (Pipeline 方案):
    • 关于数据集与标注:骨架提取(Pose Estimation)本质上属于回归任务,需要大量关键点(Keypoints)标注数据支撑。通常不会从零开始训练,而是直接采用现成的预训练模型(如Google的MoveNet或MediaPipe的轻量级模型)。你现有的驾驶员数据集仅包含分类标签,无法满足骨架模型的训练需求。

    • 算力分配方案(CPU vs NPU):

      • 骨架提取模块:由于采用深度学习模型(本质为卷积神经网络),计算量极大,必须优先部署在NPU上运行。若交由CPU处理,在MCU平台上的单帧推理时间可能长达数秒。

      • 动作分类模块:输入仅为17个关键点的一维坐标数据,可采用以下任一方案:

        • 直接编写启发式规则(Heuristic Rules)由CPU处理
        • 改用传统机器学习算法(如SVM、决策树)在CPU上执行
        • 继续使用NPU运行简单的多层感知机(MLP)
    • 致命风险: 现成的骨架提取模型通常包含比较复杂的算子(比如特殊的 Reshape、ArgMax、或者自定义的后处理层)。RUHMI 这种针对 MCU 的 AI 编译器,很有可能不支持这些复杂算子,导致编译失败或者强制 fallback 到 CPU。

这里参考了RUHMI支持算子列表

  • 方案二:端到端视觉模型 (End-to-End 方案)
    • 直接实现一个图像分类的模型,而且由于prototype当中任务简单,可以直接作为标准的图片分类模型来处理,而不需要过于复杂的Detector。
    • Darknet 的 C 代码如果不能被编译器有效映射到 NPU,纯靠 CPU 跑会卡成幻灯片。

二、模型训练

1. 数据提取

  • 下载数据集
bash 复制代码
kaggle competitions download -c state-farm-distracted-driver-detection
  • 因为任务比较简单,所以直接从数据集当中提取一部分数据作为训练数据,这里选取了三个类别,每个类别400张图片用于训练、120张图片用于验证
bash 复制代码
使用压缩包: state-farm-distracted-driver-detection.zip
c0: train=400 张, val=120 张
c6: train=400 张, val=120 张
c7: train=400 张, val=120 张
  • 后续再提取30张图片用作PTQ的校准

2. 模型构建

  • 手动构建了CNN用于分类:
python 复制代码
class TinyMCUCNN(nn.Module):
    """
    极简 CNN:
    仅使用以下算子,保证对 MCU INT8 量化编译器友好:
    - Conv2d
    - ReLU
    - MaxPool2d
    - Flatten
    - Linear
    """

3. 模型训练

模型训练

  • 最终模型在这个任务上的准确率达到了97.50%

三、模型转换和编译

1. 模型校准

bash 复制代码
echo "[1/4] 校验并准备运行时库..."
ensure_runtime_lib

RUNTIME_LIB="$RUNTIME_PREFIX/lib"
if [[ -d "$RUNTIME_LIB" ]]; then
  export LD_LIBRARY_PATH="$RUNTIME_LIB:${LD_LIBRARY_PATH:-}"
fi

echo "[2/4] 准备校准数据..."
CALIB_SOURCE="$(prepare_calibration_data)"
echo "[INFO] 使用校准输入: $CALIB_SOURCE"

echo "[3/4] 执行 ONNX -> INT8 -> Ethos 编译..."
mkdir -p "$OUT_DIR"
export PATH="$VENV_DIR/bin:${PATH}"

cd "$REPO_DIR"
"$VENV_DIR/bin/python" scripts/mcu_compile.py \
  "$MODEL_PATH" \
  "$OUT_DIR" \
  --npu \
  --quantize \
  --calib-data "$CALIB_SOURCE" \
  --calib-num "$CALIB_NUM" \
  --ref-data

echo "[4/4] 汇总输出目录..."
DEPLOY_DIR="$(find "$OUT_DIR" -type d -path '*/deploy' | head -n 1 || true)"
SRC_DIR="$(find "$OUT_DIR" -type d -path '*/deploy/build/MCU/compilation/src' | head -n 1 || true)"

echo
echo "[DONE] 编译流程完成。"
echo "输出根目录: $OUT_DIR"
if [[ -n "$DEPLOY_DIR" ]]; then
  echo "部署目录: $DEPLOY_DIR"
fi
if [[ -n "$SRC_DIR" ]]; then
  echo "C代码目录: $SRC_DIR"
fi

编译在量化阶段,被系统 C++ 运行库卡住:缺少 GLIBCXX_3.4.31/3.4.32,这是 fe_onnx_cli 的依赖问题:

  • 系统最高只有 GLIBCXX_3.4.30,Conda 里也不够,必须补一个更新的 libstdc++ 运行库才能让 MERA 的 fe_onnx_cli 工作

2. 模型转换

相关推荐
Crazy CodeCrafter1 天前
小城消费降级,服装实体要跟风转线上吗?
大数据·人工智能·自动化·开源软件
tq10861 天前
AI:知识生产的新石器革命
人工智能
小陈工1 天前
2026年4月4日技术资讯洞察:异步编程范式重塑、架构理性回归与开发者体验革命
开发语言·人工智能·python·机器学习·架构·数据挖掘·回归
GISer_Jing1 天前
GeoFlow-AI:智能三维地理空间处理平台
前端·人工智能·架构
ん贤1 天前
ReAct Agent 与 Agent 编排:从单 Agent 闭环到多 Agent 协作(纯享版)
人工智能·ai·agent·react
廋到被风吹走1 天前
【AI】Codex 复杂任务拆解:从“一气呵成“到“步步为营“
人工智能·wpf
code_pgf1 天前
yolov8详细讲解,包括网络结构图、关键创新点、部署
网络·人工智能·yolo
财经资讯数据_灵砚智能1 天前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年4月4日
大数据·人工智能·python·信息可视化·自然语言处理·ai编程
AI_Auto1 天前
AI时代,产品逻辑的时代转折(播客)
人工智能
qq_150841991 天前
关于TTL单端到RS485差分
嵌入式硬件