rrc_detection+caffe 环境搭建/测试结果

本文档详细记录了在Ubuntu 16.04上使用CUDA 8.0和CUDNN 5.1配置RRC_Detection的完整过程,包括环境搭建、数据准备、训练和测试,并针对编译过程中遇到的问题提供了解决方案。此外,还展示了预训练模型的测试结果和置信度过滤的优化效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rrc 是论文 Accurate Single Stage Detector Using Recurrent Rolling Convolution 中提出的。
论文地址为:rrc_detection
github 地址为:xiaohaoChen/rrc_detection

0. 环境

  • Ubuntu 16.04
  • cuda 8.0 + cudnn 5.1
  • python 2.7
  • protobuf 2.6.1
  • opencv 3.1

因为 rrc_detection 年代比较久远了,所以用的都是一些比较旧的环境。

以上这些配置都是在我踩了无数次坑以后才得出来的,都是泪。

0.1 cuda7.5+cudnn 5.0

rrc-github 里面是说需要 cuda7.5+cudnn5.0,我一开始也是那么装的,但是因为我的显卡是 Titan Xp,根据维基百科上的 CUDAcuda7.5 并不支持 Titan Xp ,导致了后面 make runtest 的时候出现了错误:

Check failed: error == cudaSuccess (8 vs. 0) invalid device function

忽略这个错误直接跑训练,或者直接使用作者的预训练模型跑测试,都会出现这个错误。

0.2 cuda8.0+cudnn6.0

于是我切换到了cuda8.0,详情可见:Ubuntu 多版本 CUDA 共存

在编译的时候就会出错。

0.3 cuda8.0+不使用cudnn

然后我尝试将Makefile.config 里面的:

USE_CUDNN := 1

注释掉,然后可以正常编译和测试,但是在跑训练的时候会出现:

Check failed: error == cudaSuccess (2 vs. 0)  out of memory

就是显存不够用了,但是我已经修改了 rrc_kitti_car.py

batch_size = 4 --> batch_size = 1
accum_batch_size = 8 --> accum_batch_size = 1

已经没办法再小了,所以我猜是因为没有 cudnn 的优化,所以占用的内存太大了。

0.4 cuda8.0 + cudnn 5.1

这个配置可以正常编译,但是在 make runtest 的时候还是会出错:

Check failed: datum.encoded() Datum not encoded

我不管这个错误,直接去跑训练,发现可以正常跑起来,虽然还不知道结果。

而且在:

batch_size = 1
accum_batch_size = 1

的情况下,12GB 的显存也几乎都占满了:

>> nvidia-smi
Thu Apr 25 12:56:33 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.87                 Driver Version: 390.87                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  TITAN Xp            Off  | 00000000:01:00.0  On |                  N/A |
| 45%   72C    P2    79W / 250W |  11065MiB / 12194MiB |      5%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0       999      G   /usr/lib/xorg/Xorg                           116MiB |
|    0      1702      C   ./build/tools/caffe                        10937MiB |
+-----------------------------------------------------------------------------+

注意:因为我是 zsh 用户,所以配置文件使用的是 ~/.zshrc,下文中遇到 ~/.zshrc 的地方,bash 用户请自行更换为 ~/.bashrc


1. 安装caffe

1.1 安装依赖包

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler 
sudo apt-get install --no-install-recommends libboost-all-dev 
sudo apt-get install libatlas-base-dev 
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

安装完以后,自动拥有了 protobuf 2.6.1了。

将代码克隆到本地:

git clone https://github.com/xiaohaoChen/rrc_detection.git

我这里的目录是:

/home/memory/code/rrc_detection

后面我们称之为 $CAFFE_ROOT,遇到 $CAFFE_ROOT 的地方,请自行更换为自己的路径。将其添加到配置文件中:

sudo gedit ~/.zshrc		# zsh 用户
sudo gedit ~/.bashrc	# bash 用户

在后面添加:

export PYTHONPATH=$CAFFE_ROOT/python:$PYTHONPATH	# 将 $CAFFE_ROOT 换成你自己的路径

然后:

source ~/.zshrc

1.2 python 环境配置

我使用的是 Anaconda 创建的环境,使用 python2.7 创建一个环境,我的环境是:rrc_env.

启动环境,进入 $CAFFE_ROOT

source activate rrc_env
cd $CAFFE_ROOT

安装依赖的 python 库:

pip install nump
<think>嗯,用户问的是如何用Python处理日志文件里的RRC连接统计信息,然后导出到Excel。首先,我需要理清楚整个流程。可能用户是通信工程师或者数据分析师,处理网络日志数据,他们需要将结构化的日志信息提取出来整理成Excel表格,方便后续分析和报告。 首先,日志文件的格式是什么样的呢?假设日志中的每一行都有类似“RRC连接时间=150ms,空闲时间=300ms,计数=5”这样的条目。用户需要提取这些数值。所以第一步应该是读取日志文件,逐行解析,用正则表达式匹配关键字,比如“RRC连接时间”、“空闲时间”和“计数”后面的数值。可能需要用到Python的re模块。 然后,提取出来的数据需要存储到某种数据结构里,比如列表或者字典。每个条目可能包括时间、空闲时间和计数的数值。接下来,把这些数据整理成表格形式,可能用pandas库的DataFrame来处理,这样方便导出到Excel。 导出到Excel的话,pandas有to_excel方法,可以轻松实现。但需要确保安装了openpyxl或者xlsxwriter这样的库作为引擎。用户可能需要调整列宽,设置标题格式,或者添加表头,这些pandas也能支持,但可能需要额外的代码。 另外,用户可能会遇到日志格式不一致的情况,比如有些行可能缺少某些字段,或者单位不统一,比如有的用ms,有的用秒。这时候需要考虑数据清洗,比如统一单位,处理缺失值。或者在正则表达式中考虑不同的情况,比如数值可能带有小数点,或者单位可能有变化。 还有,生成的Excel是否需要特定的格式,比如日期格式、数字格式,或者需要添加图表?用户可能没有提到这些,但作为优化点,可以建议他们如果需要的话可以使用openpyxl来自定义格式。 测试阶段的话,可能需要用示例日志文件验证代码的正确性,确保所有数据都被正确提取和导出。此外,处理大文件时的性能问题,比如逐行读取而不是一次性读取整个文件,避免内存不足。 用户可能没有提到如何处理多个日志文件,或者是否需要合并多个文件的数据到同一个Excel中。如果有这种情况,可能需要扩展代码,遍历目录下的所有日志文件,逐个处理,然后合并数据。 最后,生成相关问题的时候,要考虑用户可能的后续需求,比如数据可视化、自动化处理、错误处理,或者如何优化解析效率。这样可以帮助用户更全面地应用解决方案。</think>### 分步解决方案:将Python处理的RRC日志导出到Excel #### 步骤1:日志文件结构解析 假设日志文件包含如下格式的数据: ``` 2023-10-01 12:05:23 | RRC连接时间=150ms,空闲时间=300ms,计数=5 2023-10-01 12:06:17 | RRC连接时间=200ms,空闲时间=250ms,计数=3 ``` #### 步骤2:安装依赖库 ```bash pip install pandas openpyxl ``` #### 步骤3:Python数据处理代码 ```python import re import pandas as pd def parse_log(log_path): pattern = r"RRC连接时间=(\d+)ms.*?空闲时间=(\d+)ms.*?计数=(\d+)" data = [] with open(log_path, 'r', encoding='utf-8') as f: for line in f: match = re.search(pattern, line) if match: data.append({ "连接时间(ms)": int(match.group(1)), "空闲时间(ms)": int(match.group(2)), "连接计数": int(match.group(3)) }) df = pd.DataFrame(data) df.to_excel("rrc_stats.xlsx", index=False, engine='openpyxl') # 调用示例 parse_log("network_log.txt") ``` #### 步骤4:输出验证 生成的Excel表格将包含三列: 1. 连接时间(ms) 2. 空闲时间(ms) 3. 连接计数 #### 优化建议 1. 添加异常处理机制应对格式错误 2. 使用`xlwt`替代`openpyxl`处理.xls格式(适用于旧版Excel) 3. 添加日期时间解析功能(如果日志包含时间戳)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值