简历项目之无人机图像目标识别
项目介绍
这个项目是一个基于嵌入式平台的无人机图像智能探测系统,周期大约一年。同时也是我的硕士课题。项目的目标是实现无人机端的高效实时图像检测,同时兼顾精度和轻量化。
我的职责主要工作包括四个方面:
第一,基于 V4L2 框架完成 CSI/USB 摄像头的视频采集,保证了高效、低延迟的数据输入;
第二,针对复杂环境下模型鲁棒性不足以及图像容易受到对抗样本的干扰问题,我生成了 对抗样本(如 PGD、DeepFool 等),并进行对抗训练,提高了模型在干扰场景下的稳定性;
第三,使用 PyQt 搭建了训练与检测的图形化界面,便于模型和数据源的选择,提升了实验效率;
最后,我对检测模型进行了剪枝和蒸馏等轻量化处理,并部署到 Jetson AGX Orin 平台,实现了实时检测。
最终成果是:模型的 map@50 提升了 13.2%,达到 96.67%;在视频检测上可以达到 68 FPS;同时,模型参数减少了 31.3%,计算量降低 35.6%。此外,项目还产生了 2 篇 SCI 论文、2 项发明专利和 1 项软件著作权。
项目问题
1、介绍一下V4L2框架
介绍:V4L2,全称 Video for Linux 2,是 Linux 内核提供的一套视频采集与控制的标准 API,它主要解决两个问题:
(1)统一接口:不同的摄像头硬件底层差异很大,V4L2 在内核中抽象成统一的接口,应用层不需要关心具体硬件实现。
(2)高效传输:通过零拷贝机制(mmap、DMA),提升视频流的采集效率,满足实时处理需求。
在嵌入式系统里,比如 Jetson、树莓派等,V4L2 是最底层、最直接的摄像头视频采集方式,效率比 OpenCV 的封装更高。
工作流程:
V4L2 的典型工作流程可以分为五个阶段:
(1)打开设备
应用层通过 open(“/dev/video0”) 获取摄像头设备句柄。
设备文件 /dev/videoX 由内核驱动创建。
(2)查询与设置参数
使用 VIDIOC_QUERYCAP 查询设备能力,比如是否支持视频捕获、是否支持流式 I/O。
设置采集参数:分辨率(640×480、1920×1080)、像素格式(YUYV、NV12、MJPEG)、帧率等。
这些通过 VIDIOC_S_FMT、VIDIOC_S_PARM 来配置。
(3)申请缓存与映射
使用 VIDIOC_REQBUFS 申请若干缓冲区。
通过 mmap() 将内核空间的缓冲区映射到用户空间,避免数据拷贝,降低延迟。
(4)开始采集与数据流转
用 VIDIOC_QBUF 把缓冲区放入队列,驱动填充采集到的帧数据。
应用层调用 VIDIOC_DQBUF 从队列中取出已经填满的缓冲区,得到一帧视频数据。
通过轮询或 select/poll/epoll 等方式进行帧同步。
(5)停止采集与释放资源
调用 VIDIOC_STREAMOFF 停止采集。
释放映射内存,关闭设备。
2、介绍剪枝与蒸馏
剪枝原理:通过移除神经网络中冗余、不重要的参数或结构,减少模型规模和计算量。
方法选择:
主要使用了结构化剪枝(channel/filter pruning),而不是单纯的非结构化剪枝。
原因是结构化剪枝能减少整个卷积核或通道,更容易在硬件上加速,而非结构化剪枝需要稀疏矩阵计算,硬件优化难度更大。
实现步骤:
(1)分析卷积层中权重的重要性(如基于权重的 L1 范数)。
(2)删除贡献度低的通道/卷积核。
(3)微调模型,恢复精度。