DensePose(四):config.py

本文详细解析了DensePose在Detectron平台上的配置文件config.py,涵盖训练默认参数、RPN参数、数据加载设置、推断与测试参数等多个方面,包括测试时间增强、Soft NMS、Bounding Box投票等关键选项。

DensePose是在Detectron平台上做的密集姿态估计,此处Detectron的confg.py 文件相比较于原来MR-CNN以及KR-CNN时用的config.py做了一些添加与改进。如果之前对于Detectron比较熟悉,可以直接看 18.DensePose R-CNN options

下面是一些关于config.py写在前面的注释:

"""
Detectron配置系统.

这对于Detectron文件指定默认的配置选项。你不应该变化值在这个文件中。

相反,你应该写一个配置文件(yaml),使用merge_cfg_from_file(yaml_file)
加载和覆盖默认的选项。

大多数工具在工具目录中——cfg选项指定一个覆盖

覆盖的文件和一个可选列表(键,值)对:
- See tools/{train,test}_net.py 的代码示例来使用merge_cfg_from_file
- See configs/*/*.yaml 的示例来编写config文件
Detectron支持很多不同的模型类型,每一种都有很多不同的选择。结果是一组巨大的
配置选项。"""
#import一系列的相关包,此处不赘述
#注意关于__future__的import要写到文件最前面


from detectron.utils.collections import AttrDict
from detectron.utils.io import cache_url
logger = logging.getLogger(__name__)

__C = AttrDict()
# Consumers can get config by:(用户可以获得config通过)
#   from detectron.core.config import cfg
cfg = __C
#避免使用 '.ON' 作为参数配置中的 key.
#因为 yaml 会将其转化为 True. 可使用 'ENABLED' 取代 '.ON'.

1. 训练默认参数

# ---------------------------------------------------------------------------- #
# 训练默认参数
# ---------------------------------------------------------------------------- #
__C.TRAIN = AttrDict()

# 从 .pkl 文件初始化网络权重参数;.pkl 可以是预训练模型.
__C.TRAIN.WEIGHTS = b''

# 训练数据集 Datasets
# 训练数据集列表设定:detectron.datasets.dataset_catalog.datasets()
# 如果设定了多个 datasets,则会在其并集上进行模型训练.
__C.TRAIN.DATASETS = ()

# 训练所采用的缩放尺度 Scales
# 每一个 scale 是图像短边的像素值
# 如果给定了多个 scales 值,则对于每个训练图片随机选取一个 scale,如尺度抖动数据增强scale jitter data augmentation
__C.TRAIN.SCALES = (600, )

# 缩放后输入图片最长边的最大像素值
__C.TRAIN.MAX_SIZE = 1000

# 训练 mini-batch 每张 GPU 的图片数
# 每个 mini-batch 的总图片数 = 每张 GPU 的图片数 * GPUs 数
# Total images per minibatch = TRAIN.IMS_PER_BATCH * NUM_GPUS
__C.TRAIN.IMS_PER_BATCH = 2

# 每张图片的 RoI mini-batch,即每张图片的 RoIs 数.
# 每张训练 mini-batch 中总的 RoIs 数 = 每张图片 mini-batch RoIs 数 * mini-batch 图片数 * GPUs 数
# 典型配置: 512 * 2 * 8 = 8192
# RoI minibatch size *per image* (number of regions of interest [ROIs])
# Total number of RoIs per training minibatch =
#   TRAIN.BATCH_SIZE_PER_IM * TRAIN.IMS_PER_BATCH * NUM_GPUS
__C.TRAIN.BATCH_SIZE_PER_IM = 64

# mini-batch 中被标记为 foreground RoIs(i.e. class > 0) 的目标分数Target fraction 
__C.TRAIN.FG_FRACTION = 0.25

# RoI 的重叠区域大于 FG_THRESH 则被标记为 foreground
__C.TRAIN.FG_THRESH = 0.5

# RoI 的重叠区域在 [LO, HI] 区间内则被标记为 background (i.e. class = 0)
__C.TRAIN.BG_THRESH_HI = 0.5
__C.TRAIN.BG_THRESH_LO = 0.0

# 训练是否水平翻转图片
__C.TRAIN.USE_FLIPPED = True

# 如果 RoI 和 groundtruth box 的重叠区域大于阈值BBOX_THRESH,则(RoI gt_box)对作为边界框 bounding-box 回归训练样本.
__C.TRAIN.BBOX_THRESH = 0.5

# 模型保存周期,即多少次迭代进行一次模型断点保存.
# 需要除以 GPUs 数 NUM_GPUS,e.g., 20000/8 => 2500 iters
__C.TRAIN.SNAPSHOT_ITERS = 20000

# 训练采用指定的 proposals 
# 训练过程中,所有的 proposals 是在 proposal 文件中指定的.
# proposals 文件与 TRAIN.DATASETS 数据集相对应.
__C.TRAIN.PROPOSAL_FILES = ()

# 确保图片 mini-batches 具有相同的长宽比,(i.e. both tall and thin or both short and wide)
# 对于节省内存很重要,可以稍微加快训练.
__C.TRAIN.ASPECT_GROUPING = True

2. RPN 训练参数

# ---------------------------------------------------------------------------- #
# RPN 训练默认参数
# ---------------------------------------------------------------------------- #

# 如果 anchor 和 groundtruth box 的最小重叠区域大于阈值 RPN_POSITIVE_OVERLAP, 
# 则 (anchor, gt_box) 对作为 positive 训练样本
# (IOU >= thresh ==> positive RPN example)
__C.TRAIN.RPN_POSITIVE_OVERLAP = 0.7

# 如果 anchor 和 groundtruth box 的最大重叠区域小于阈值 RPN_NEGATIVE_OVERLAP, 
# 则 (anchor, gt_box) 对作为 negative 训练样本
# (IOU < thresh ==> negative RPN example)
__C.TRAIN.RPN_NEGATIVE_OVERLAP = 0.3

# 每个 RPN mini-batch 中被标记为 foreground (positive) 样本的目标分数Target fraction
__C.TRAIN.RPN_FG_FRACTION = 0.5

# 每张图片的 RPN 样本总数
__C.TRAIN.RPN_BATCH_SIZE_PER_IM = 256

# RPN proposals 所采用的 NMS 阈值 (end-to-end training with RPN 时使用)
__C.TRAIN.RPN_NMS_THRESH = 0.7

# NMS 处理前,top 分数的 RPN proposals 数
# When FPN is used, this is *per FPN level* (not total)
__C.TRAIN.RPN_PRE_NMS_TOP_N = 12000

# NMS 处理后,保留的 top 分数的 RPN proposals 数
# 所产生的 RPN proposals 总数(FPN 和 non-FPN 一样)
__C.TRAIN.RPN_POST_NMS_TOP_N = 2000

# 设定阈值像素值 RPN_STRADDLE_THRESH,丢弃超出图片边界的 PRN anchors
# 设定 RPN_STRADDLE_THRESH = -1 或 RPN_STRADDLE_THRESH = Large_Value(e.g. 100000),则不进行 anchors 裁剪.
__C.TRAIN.RPN_STRADDLE_THRESH = 0

# proposal 的 height 和 width 需要同时大于阈值RPN_MIN_SIZE
# (相对于原始图片尺度,不是训练或测试时的尺度)
__C.TRAIN.RPN_MIN_SIZE = 0

# 根据阈值CROWD_FILTER_THRESH 过滤在 crowd 区域的 proposals.
# "Inside" 的度量:proposal-with-crowd 交叉区域面积除以 proposal面积.
# "Inside" is measured as: proposal-with-crowd intersection area divided by proposal area.
__C.TRAIN.CROWD_FILTER_THRESH = 0.7

# 忽略面积小于阈值GT_MIN_AREA 的 groundtruth 物体
__C.TRAIN.GT_MIN_AREA = -1

# 如果FREEZE_CONV_BODY设定为 True,则冻结骨干backbone网络结构参数
__C.TRAIN.FREEZE_CONV_BODY = False

# 设定AUTO_RESUME=True 时,从输出路径中的最近模型断点snapshot 恢复训练
__C.TRAIN.AUTO_RESUME = True

3. 数据加载默认参数

# ---------------------------------------------------------------------------- #
# 数据加载选项 (see detectron/roi_data/loader.py for more info)
# ---------------------------------------------------------------------------- #
__C.DATA_LOADER = AttrDict()

# 数据加载所用的 Python 线程数threads (warning: using too many
# 注:如果使用过多的线程,会出现 GIL 锁,导致训练变慢,实验发现 4 线程最佳.)
__C.DATA_LOADER.NUM_THREADS = 4

# 共享minibatch队列的大小
__C.DATA_LOADER.MINIBATCH_QUEUE_SIZE = 64

# 每块GPU blobs队列的容量
__C.DATA_LOADER.BLOBS_QUEUE_CAPACITY = 8

4. 推断/测试参数

# ---------------------------------------------------------------------------- #
# Inference ('test') options
# ---------------------------------------------------------------------------- #
__C.TEST = AttrDict()

# 从.pkl文件中初始化网络的权重
__C.TEST.WEIGHTS = b''

# 测试数据集
# 可用数据集列表设置:detectron.datasets.dataset_catalog.datasets()
# 如果有多个训练集,则依次在每个数据集上进行
__C.TEST.DATASETS = ()

# 测试时所使用的尺度
__C.TEST.SCALE = 600

# 尺度缩放后输入图片的长边最大像素值
__C.TEST.MAX_SIZE = 1000

# NMS 的重叠阈值(suppress boxes with IoU >= this threshold)
__C.TEST.NMS = 0.3

# 如果 BBOX_REG 设定为 True,则采用类似于 Faster R-CNN bounding-box 回归的形式.
__C.TEST.BBOX_REG = True

# 利用给定 proposals 文件进行测试(must correspond with TEST.DATASETS)
__C.TEST.PROPOSAL_FILES = ()

# 限定推断时每张图片的 proposals 数
__C.TEST.PROPOSAL_LIMIT = 2000

# NMS threshold used on RPN proposals
__C.TEST.RPN_NMS_THRESH = 0.7

# NMS 处理前,top 分数的 RPN proposals 数
# 当FPN被用到时, this is *per FPN level* (not total)
__C.TEST.RPN_PRE_NMS_TOP_N = 12000

# NMS 处理后,保留的 top 分数的 RPN proposals 数
# 所产生的 RPN proposals 总数(FPN 和 non-FPN 一样)
__C.TEST.RPN_POST_NMS_TOP_N = 
WARNING: disk usage in log directory [/home/sx/.ros/log] is over 1GB. It's recommended that you use the 'rosclean' command. started roslaunch server http://sx-NUC8i5BEH:34675/ SUMMARY ======== PARAMETERS * /common/imu_topic: /livox/imu * /common/lid_topic: /livox/lidar * /common/time_offset_lidar_to_imu: 0.0 * /common/time_sync_en: False * /cube_side_length: 1000.0 * /feature_extract_enable: False * /filter_size_map: 0.5 * /filter_size_surf: 0.5 * /mapping/acc_cov: 0.1 * /mapping/b_acc_cov: 0.0001 * /mapping/b_gyr_cov: 0.0001 * /mapping/det_range: 100.0 * /mapping/extrinsic_R: [1, 0, 0, 0, 1, 0... * /mapping/extrinsic_T: [-0.011, -0.02329... * /mapping/extrinsic_est_en: False * /mapping/fov_degree: 360 * /mapping/gyr_cov: 0.1 * /max_iteration: 3 * /pcd_save/interval: -1 * /pcd_save/pcd_save_en: False * /pcd_save_en: False * /point_filter_num: 3 * /pointcloud_to_laserscan/angle_increment: 0.0087 * /pointcloud_to_laserscan/angle_max: 3.14159 * /pointcloud_to_laserscan/angle_min: -3.14159 * /pointcloud_to_laserscan/concurrency_level: 1 * /pointcloud_to_laserscan/inf_epsilon: 1.0 * /pointcloud_to_laserscan/max_height: 1.0 * /pointcloud_to_laserscan/min_height: 0.0 * /pointcloud_to_laserscan/range_max: 30.0 * /pointcloud_to_laserscan/range_min: 0.05 * /pointcloud_to_laserscan/scan_time: 10 * /pointcloud_to_laserscan/transform_tolerance: 0.01 * /pointcloud_to_laserscan/use_inf: True * /preprocess/blind: 0.5 * /preprocess/lidar_type: 1 * /preprocess/scan_line: 4 * /publish/dense_publish_en: True * /publish/path_en: False * /publish/scan_bodyframe_pub_en: True * /publish/scan_publish_en: True * /rosdistro: noetic * /rosversion: 1.17.0 * /runtime_pos_log_enable: False NODES / global_localization (fast_lio_localization/global_localization.py) laserMapping (fast_lio/fastlio_mapping) map_publishe (pcl_ros/pcd_to_pointcloud) map_server (map_server/map_server) pointcloud_to_laserscan (pointcloud_to_laserscan/po
最新发布
03-31
<think>好的,用户的问题是关于如何清理ROS日志目录以释放磁盘空间,以及解析FAST_LIO相关的参数配置。首先,我需要回忆一下ROS的日志管理机制。ROS默认会在~/.ros/log目录下存储日志文件,长时间运行可能导致磁盘空间不足。用户可能遇到了这个问题,所以需要清理方法。 接下来,清理ROS日志的方法,我记得有rosclean命令。rosclean check可以检查日志大小,rosclean purge则删除所有日志。需要确认这些命令的具体用法和注意事项,比如是否需要权限,是否会删除所有日志等。另外,用户可能希望自动清理,可以考虑设置定时任务或者修改环境变量改变日志存储位置。 然后是FAST_LIO的参数配置部分。用户提到想了解相关参数,可能需要解析常见的参数文件,比如YAML配置文件中的参数,如激光雷达话题、IMU话题、地图分辨率等。此外,用户提到的错误中涉及Pose6D.h头文件缺失,可能需要检查依赖安装,特别是fast_lio包是否安装正确,或者CMakeLists.txt中的设置是否正确,比如C++标准设置是否如引用[4]提到的C++14。 还需要考虑用户的环境,比如是否使用ROS Noetic,因为引用[3]提到项目地址是针对ROS Noetic的。可能存在的依赖问题,如引用[2]提到的python 2.7和ros_numpy,需要确认用户的环境是否满足这些依赖。 另外,用户的问题中引用了几个错误信息,比如Pose6D.h找不到,这可能和依赖安装或编译配置有关。可能需要指导用户检查include路径是否正确,或者重新安装相关依赖包。 最后,总结步骤:清理日志的方法,参数配置的解析,以及可能的依赖问题解决。需要确保回答清晰,分步骤说明,并引用提供的参考资料来支持建议。</think>### ROS日志清理与参数配置指南 #### 一、清理ROS日志目录 1. **手动清理日志** ```bash rosclean check # 检查日志目录大小 rosclean purge # 删除所有日志文件 ``` 执行`rosclean purge`会删除`~/.ros/log`下所有日志文件,建议先备份重要日志[^1][^2]。 2. **自动清理配置** ```bash export ROS_LOG_DIR=/tmp/ros_log # 修改日志存储路径 ``` 在`~/.bashrc`添加上述命令,可避免默认路径空间不足问题。 3. **定时清理脚本** ```bash # 每周清理一次日志 0 0 * * 0 rosclean purge -y ``` 通过`crontab -e`添加定时任务[^2]。 --- #### 二、FAST_LIO参数配置解析 1. **核心参数文件** ```yaml # params_lidar.yaml lidar_topic: "/points_raw" # 激光雷达话题 imu_topic: "/imu/data" # IMU话题 map_resolution: 0.05 # 地图分辨率(单位:米) ``` 参数路径通常位于`FAST_LIO/config`目录[^3]。 2. **编译参数修正** ```cmake # CMakeLists.txt关键配置 set(CMAKE_CXX_STANDARD 14) # 强制使用C++14标准[^4] find_package(fast_lio REQUIRED) include_directories(${fast_lio_INCLUDE_DIRS}) ``` 3. **依赖验证** ```bash sudo apt-get install ros-noetic-ros-numpy # 安装python2.7依赖 ``` 需确保`fast_lio/Pose6D.h`头文件存在于ROS包路径中[^1]。 --- #### 三、关键问题解决方案 1. **Pose6D.h缺失错误** ```bash cd ~/catkin_ws/src git clone https://github.com/hku-mars/FAST_LIO --recursive catkin_make -DCMAKE_BUILD_TYPE=Release ``` 完整克隆仓库可解决头文件缺失问题[^1]。 2. **磁盘空间监控** ```bash watch -n 60 df -h /home # 每分钟监控磁盘使用 ``` 建议对日志目录设置磁盘配额。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值