1. 高压输电线路异物检测项目概述
在电力系统运维中,高压输电线路的异物入侵检测一直是个棘手问题。传统人工巡检不仅效率低下,还存在安全隐患。去年参与某省级电网智能化改造项目时,我们尝试基于改进YOLOv5算法开发了一套自动检测系统。这个开发日志记录了从环境搭建到模型优化的完整过程,特别整理了在Ubuntu 18.04系统下配置深度学习环境的实战经验。
整个项目涉及三大技术难点:首先是复杂环境下的目标检测,输电线路场景存在大量干扰物;其次是模型轻量化需求,需部署在边缘设备;最后是跨平台兼容性问题,从训练到部署涉及CUDA、OpenCV等多组件版本匹配。本文将重点分享环境配置环节的避坑指南,这些经验同样适用于其他计算机视觉项目。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 开发环境配置全记录
2.1 基础环境搭建
项目采用Ubuntu 18.04作为基础系统,搭配NVIDIA GTX 1050Ti显卡。这个组合在成本与性能间取得了较好平衡,但版本兼容性问题需要特别注意:
bash复制# 系统基本信息
OS: Ubuntu 18.04.6 LTS
GPU: NVIDIA GeForce GTX 1050 Ti (Pascal架构,算力6.1)
Driver Version: 390.48
CUDA: 9.1.85
cuDNN: 7.1.4
关键提示:Pascal架构显卡最高支持CUDA 9.1,新版本驱动反而会导致兼容性问题。我们最终选择390系列驱动配合CUDA 9.1的方案。
2.1.1 GCC降级处理
由于CUDA 9.1对GCC版本有严格要求,而Ubuntu 18.04默认GCC版本过高,必须进行降级:
bash复制# 安装GCC 6
sudo apt-get install gcc-6 g++-6
# 设置替代版本
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 60
# 验证版本
gcc --version # 应显示6.x版本
这个步骤看似简单,但实际踩过两个坑:一是忘记同时降级g++,导致后续编译出错;二是alternatives优先级设置不当,造成系统命令混乱。建议操作后立即验证版本。
2.2 CUDA与cuDNN安装
2.2.1 CUDA 9.1定制安装
从NVIDIA官网下载runfile安装包后,需要特别关注安装选项:
bash复制sudo sh cuda_9.1.85_387.26_linux.run --override
安装时务必取消勾选驱动安装选项(Driver选项),因为我们已经单独安装了390.48驱动。环境变量配置如下:
bash复制# ~/.bashrc追加
export PATH=/usr/local/cuda-9.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
验证安装时发现一个典型问题:运行deviceQuery样例时报错"no CUDA-capable device is detected"。这通常是因为驱动版本不匹配,通过重新加载内核模块解决:
bash复制sudo rmmod nvidia_uvm
sudo modprobe nvidia_uvm
2.2.2 cuDNN 7.1.4部署
下载cuDNN Library for Linux后,执行以下操作:
bash复制tar -xzvf cudnn-9.1-linux-x64-v7.1.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
特别注意文件权限问题,遇到过因权限不足导致训练时cuDNN无法加载的情况。
2.3 Python环境配置
2.3.1 Python 3.6.8编译安装
由于系统自带Python版本不符合要求,需要源码编译:
bash复制wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
tar xzf Python-3.6.8.tgz
cd Python-3.6.8
./configure --prefix=/usr/local/python3.6.8 --enable-optimizations
make -j8
sudo make altinstall # 使用altinstall避免替换系统Python
这里有个重要细节:使用make altinstall而非make install,可以防止覆盖系统默认Python解释器,避免引发系统工具链崩溃。
2.3.2 虚拟环境搭建
采用conda管理项目依赖:
bash复制conda create -n yolo5 python=3.6.8
conda activate yolo5
pip install torch==1.7.0+cu91 torchvision==0.8.1+cu91 -f https://download.pytorch.org/whl/torch_stable.html
特别注意PyTorch版本后缀cu91,这表示CUDA 9.1专用版本。曾因忽略此后缀导致GPU加速失效,训练速度下降10倍。
3. YOLOv5专项配置
3.1 依赖库精确匹配
YOLOv5的requirements.txt需要针对性调整:
text复制# 修改后的requirements.txt
gitpython>=3.1.30
matplotlib>=3.3
numpy==1.18.5 # 固定版本避免兼容问题
opencv-python==4.1.1.26 # 与CUDA 9.1兼容的版本
Pillow>=7.1.2
PyYAML>=5.3.1
scipy>=1.4.1
torch>=1.7.0
torchvision>=0.8.1
tqdm>=4.64.0
安装过程中发现OpenCV版本过高会导致CUDA加速失效。通过测试多个版本,最终确定4.1.1.26最稳定。
3.2 模型可视化技巧
使用Netron进行模型结构分析:
bash复制pip install netron onnx
python export.py --weights yolov5s.pt --include onnx
netron yolov5s.onnx
这个可视化过程帮助我们理解了YOLOv5的SPP和PAN结构,为后续改进算法打下基础。特别注意到Focus模块的切片操作对硬件不友好,这成为我们后续优化的重点。
4. 典型问题解决方案
4.1 驱动版本冲突
遇到的第一个严重问题是PyTorch与驱动不兼容:
bash复制RuntimeError: CUDA error: no kernel image is available for execution on the device
排查发现是PyTorch 1.7需要CUDA 10.1+,而我们的环境是CUDA 9.1。解决方案是安装定制版PyTorch:
bash复制pip install torch==1.7.0+cu91 torchvision==0.8.1+cu91 -f https://download.pytorch.org/whl/torch_stable.html
4.2 OpenCV编译问题
源码编译OpenCV时遇到CUDA加速失效:
bash复制cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN=6.1 ..
关键是要正确指定显卡算力(1050Ti为6.1)。还须开启以下选项:
bash复制-D WITH_CUBLAS=ON -D WITH_NVCUVID=ON -D BUILD_opencv_cudacodec=OFF
5. 输电线路检测专项优化
5.1 数据增强策略
针对高空拍摄特点,特别加强了以下增强:
python复制# data/hyps/hyp.scratch.yaml
hsv_h: 0.015 # 色相抖动加强
hsv_s: 0.7 # 饱和度调整范围增大
fliplr: 0.5 # 水平翻转
mosaic: 1.0 # 马赛克增强
这种配置使模型对光线变化和视角变化的鲁棒性提升23%。
5.2 模型轻量化改进
原始YOLOv5s在1050Ti上仅能达到15FPS,通过以下改进提升到28FPS:
- 将Focus模块替换为Conv层
- 精简SPPF结构
- 采用深度可分离卷积
python复制# models/yolov5s-custom.yaml
backbone:
# [from, number, module, args]
[[-1, 1, Conv, [32, 3, 2]], # 替换Focus
[-1, 1, Conv, [64, 3, 2]],
[-1, 1, C3, [64]],
...]
这种改进使模型参数量减少40%,推理速度提升87%,同时保持92%的原始mAP精度。
6. 部署优化实践
6.1 TensorRT加速
将模型转换为TensorRT引擎:
python复制python export.py --weights best.pt --include engine --device 0
关键参数:
--half: 启用FP16精度--dynamic: 允许动态输入尺寸--workspace 4: 分配4GB显存
实测加速后推理时间从15ms降至6ms,满足实时性要求。
6.2 边缘设备部署
在海思Hi3516DV300芯片部署时,需转换为Caffe模型:
bash复制python models/export.py --weights best.pt --include caffe
转换过程中特别注意:
- 去除Silu激活函数(替换为ReLU)
- 合并BN层
- 固定输入尺寸
最终在边缘设备上实现12FPS的检测速度,功耗仅5W。
