前言
简单介绍使用方法:
fvcore
是一个由Facebook AI Research开发的Python工具库,提供了一些方便的工具函数和类,用于简化深度学习项目的开发过程。下面是一些fvcore
库的常用功能和使用方法:
- 安装
fvcore
库:可以使用pip安装fvcore
库,命令如下:
pip install fvcore
- 导入
fvcore
库:在Python代码中导入fvcore
库,可以使用以下语句:
import fvcore
- 使用配置文件:
fvcore
提供了config
模块,可以方便地加载和管理配置文件。可以使用以下代码加载配置文件:
from fvcore.common.config import CfgNode
cfg = CfgNode.load_yaml_file("config.yaml")
- 使用日志记录:
fvcore
提供了logger
模块,可以方便地记录日志。可以使用以下代码记录日志:
from fvcore.common.logger import setup_logger
logger = setup_logger(name="my_logger")
logger.info("This is an info message")
- 使用计时器:
fvcore
提供了timer
模块,可以方便地计时代码段的执行时间。可以使用以下代码计时:
from fvcore.common.timer import Timer
timer = Timer()
timer.tic()
# 执行需要计时的代码段
timer.toc()
print("Elapsed time: {:.2f}s".format(timer.average_time))
- 使用其他工具函数:
fvcore
还提供了一些其他的工具函数,如文件操作、数据结构操作等。可以根据具体需求查看fvcore
文档并使用相应的函数。
- 通过使用
fvcore
库提供的工具函数和类,可以简化深度学习项目的开发过程,提高开发效率。建议查看fvcore
的官方文档以获取更多详细信息和示例代码。
作用和好处:
-
简化代码:
fvcore
库提供了许多方便的工具函数和类,可以帮助开发者简化代码,减少重复性工作,提高代码的可读性和可维护性。 -
提高效率:
fvcore
库提供了一些高效的工具函数和类,可以帮助开发者更快地完成深度学习项目的开发,提高开发效率。 -
提供标准化工具:
fvcore
库提供了一些标准化的工具函数和类,可以帮助开发者遵循一致的代码规范和最佳实践,减少错误和提高代码质量。 -
方便调试和日志记录:
fvcore
库提供了方便的日志记录功能,可以帮助开发者更好地调试代码并记录关键信息,有助于排查问题和优化代码。 -
提供实用工具:
fvcore
库提供了一些实用的工具函数,如配置文件管理、计时器等,可以帮助开发者更方便地管理项目和执行任务。
- 总的来说,使用
fvcore
库可以使深度学习项目的开发过程更加高效、简洁和可靠,帮助开发者更好地专注于算法实现和模型设计,而不是繁琐的工程细节。因此,推荐在深度学习项目中使用fvcore
库以提高开发效率和代码质量。
1. 安装
pip install fvcore
2. from fvcore.common.config import CfgNode
类似如下定义各个节点各个参数
# -----------------------------------------------------------------------------
# Config definition
# -----------------------------------------------------------------------------
_C = CfgNode()
# ---------------------------------------------------------------------------- #
# Batch norm options
# ---------------------------------------------------------------------------- #
_C.BN = CfgNode()
# Precise BN stats.
_C.BN.USE_PRECISE_STATS = False
# Number of samples use to compute precise bn.
_C.BN.NUM_BATCHES_PRECISE = 200
# Weight decay value that applies on BN.
_C.BN.WEIGHT_DECAY = 0.0
# Norm type, options include `batchnorm`, `sub_batchnorm`, `sync_batchnorm`
_C.BN.NORM_TYPE = "batchnorm"
# Parameter for SubBatchNorm, where it splits the batch dimension into
# NUM_SPLITS splits, and run BN on each of them separately independently.
_C.BN.NUM_SPLITS = 1
# Parameter for NaiveSyncBatchNorm3d, where the stats across `NUM_SYNC_DEVICES`
# devices will be synchronized.
_C.BN.NUM_SYNC_DEVICES = 1
# ---------------------------------------------------------------------------- #
# Training options.
# ---------------------------------------------------------------------------- #
_C.TRAIN = CfgNode()
# If True Train the model, else skip training.
_C.TRAIN.ENABLE = True
# Dataset.
_C.TRAIN.DATASET = "kinetics"
# Total mini-batch size.
_C.TRAIN.BATCH_SIZE = 5
# Evaluate model on test data every eval period epochs.
_C.TRAIN.EVAL_PERIOD = 10
# Save model checkpoint every checkpoint period epochs.
_C.TRAIN.CHECKPOINT_PERIOD = 10
def get_cfg():
"""
Get a copy of the default config.
"""
return _C.clone()
调用 get_cfg()函数即可获得定义的各个参数
如果想和原有的config.yaml文件合并,则只需要执行
cfg.merge_from_file(path_to_config),配合parse_args()使用能让代码看起来很清爽
可参考别人代码中写的
https://github.com/Sense-X/UniFormer/tree/main/video_classification
3. from fvcore.common.registry import Registry
妙用Registry,当我需要判断不同的函数时可以使用这个妙用
from fvcore.common.registry import Registry
my_registry = Registry("111")
# 在类和函数名装饰,注册该类和函数
@my_registry.register()
def function(cfg):
f(**cfg)
# 在类和函数名装饰,注册该类和函数,实现通过函数名或者类名字直接调用
my_registry.get('function')(testcfg)