恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

slowfast超详细源码解析(点进即可得到详细配置文件解释并快速理解网络运行逻辑!!)

  • 首页
  • 资讯中心
  • /
  • slowfast超详细源码解析(点进即可得到详细配置文件解释并快速理解网络运行逻辑!!)

相关资讯

ppt-master 图像工具链实战:AI 生图、网络搜图、位图派生与来源溯源全流程 2026/9/10 15:51:05
QtScrcpy|免 root 免装 App,USB/WiFi 把安卓塞进桌面窗口 2026/9/10 15:46:04
TVBoxOSC 快速上手指南:10 分钟把旧电视盒子变成全家观影入口 2026/9/10 15:46:04

最新资讯

在 Graphite 中创建节点:从文档图到 Graphene 原型节点执行器的完整指南
程序员视角的汽车变速箱常识:AT/DCT/CVT/MT防坑指南
直驱型永磁同步发电机双PWM控制仿真研究
推荐:智能聊天助手——AskSusi Telegram Bot
FPGA密码锁实战:EGO1上Verilog状态机与数码管动态扫描
FasterNet:基于Partial卷积的轻量级图像分类新架构

今日推荐

AI搜索重构内容生态:企业从“流量争夺”转向“答案共建”
AI搜索的信任缺口:企业内容如何在答案时代自证可信
Spring Boot+Vue+Node.js售后服务系统开发实战

本周热门

超人会飞不算本事:系统稳定依赖清晰规则与边界设计
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
基于CNN的调制信号识别:MATLAB实现时频图分类实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

slowfast超详细源码解析(点进即可得到详细配置文件解释并快速理解网络运行逻辑!!)

发布时间:2026/9/10 15:51:05
slowfast超详细源码解析(点进即可得到详细配置文件解释并快速理解网络运行逻辑!!) 源码解析前言整体结构配置文件defaults.pyyaml文件代码运行逻辑demo_net.pytrain_net.py代码结构数据集调用模型构建demo_net.py读取处理数据集后言前言看一个教程比较少的代码太难了不过mmaction2的教程还挺多的一身反骨就是想用slowfast的源代码感觉可能灵活性更高一点目前还是遇到几个问题测试里面的检测设置为真到底调用的啥模型呀如果想用多物种多行为要怎么操作如果大家有什么意见欢迎来交流我看到会回的不是故意不回消息的不要举办我QAQ博主也是在学习的阶段会在学习的过程中对教程不断完善的如果大家看到什么问题也可以多多指出谢谢大家整体结构ava_evaluation关于标签图、评估指标和边界框的操作函数buildcheckpoints输出的权重文件cocoapiconfigs配置文件slowfast基于配置文件来运行的demo有点像演示案例detectron2fairscaleprojects对核心的一些解读放的理论pytorchvideoslowfastconfigs/defaults.py固定变量的config文件训练的数据在哪个目录用什么进行训练tools训练模型的运行文件、测试的运行文件和运行demo的运行文件GETTING_STARTED.md操作说明INSTALL.md安装说明json_stats.log训练过程中的内存占用情况MODEL_ZOO.md针对不同类型数据集的预训练权重VISUALIZATION_TOOLS.md一些可视化工具setup.py安装时候要用到的编译文件stdout.log训练过程中终端的内容都在这里但是把每一次的终端内容都放在一起了配置文件defaults.py在这个代码里面详细介绍了一下所有的配置yaml文件一般常用的需要修改的参数就在这里放一个详细的解释文件# 以这个为例去介绍一下yaml配置文件# 训练参数设置TRAIN:ENABLE:False# 是否启用DATASET:ava# 使用的数据集名称BATCH_SIZE:64# 每个训练批次的样本数量EVAL_PERIOD:1# 每隔多少个周期进行一次模型评估1是指每个训练周期都评估CHECKPOINT_PERIOD:1# 每隔多少个周期保存一次检查点。设置为1表示每个周期都保存。AUTO_RESUME:True# 是否在训练中断后自动恢复# CHECKPOINT_FILE_PATH: 预训练权重CHECKPOINT_TYPE:caffe2# 检查点保存的格式检查点保存的格式通常包括以下几种# PyTorch: 保存为 .pt 或 .pth 文件适用于PyTorch框架。# TensorFlow: 保存为 .ckpt 文件适用于TensorFlow框架。# Caffe: 保存为 .caffemodel 文件适用于Caffe框架。# Caffe2: 保存为 .pkl 文件适用于Caffe2框架。# ONNX: 保存为 .onnx 文件适用于ONNX框架适用于不同的深度学习框架间的模型转换。# 数据预处理参数DATA:NUM_FRAMES:4# 每个样本中包含的帧数在处理视频数据时从视频片段中选取的连续帧的数量SAMPLING_RATE:16# 采样率即从视频中提取帧的频率这里为每16帧提取一帧影响时间分辨率越高越能快速捕捉但是增加计算负担TRAIN_JITTER_SCALES:[256,320]# 训练期间图像的随机缩放范围表示图像的高度和宽度可以在256到320之间随机选择。TRAIN_CROP_SIZE:224# 训练期间裁剪后的图像大小TEST_CROP_SIZE:256# 测试期间裁剪后的图像大小INPUT_CHANNEL_NUM:[3]# 输入图像的通道数3通道的彩色图像# 检测设置DETECTION:ENABLE:True# 是否启用ALIGNED:False# 是否对检测框进行对齐更加精确地覆盖目标区域# AVA数据集的特定设置AVA:BGR:False# 是否将图像从RGB转换为BGR蓝色、绿色、红色是opencv中常使用的DETECTION_SCORE_THRESH:0.9# 检测得分的阈值TEST_PREDICT_BOX_LISTS:[person_box_67091280_iou75/ava_detection_val_boxes_and_labels.csv]# 测试时使用的预测框列表路径用于评估模型预测的准确性# RESNET模型的配置RESNET:ZERO_INIT_FINAL_BN:True# 是否将最后一层的批归一化层初始化为零WIDTH_PER_GROUP:64# 每个ResNet组的宽度NUM_GROUPS:1# ResNet模型中的组数DEPTH:50# ResNet的深度TRANS_FUNC:bottleneck_transform# 使用的转换函数类型这里是瓶颈结构bottleneck变换用于处理特定类型的数据STRIDE_1X1:False# 是否使用1x1的步幅NUM_BLOCK_TEMP_KERNEL:[[3],[4],[6],[3]]# 每个残差块中的时间卷积核数量SPATIAL_DILATIONS:[[1],[1],[1],[2]]# 每个层的空间扩张率用于调整卷积核的感受野SPATIAL_STRIDES:[[1],[2],[2],[1]]# 每个层的空间步幅用于调整卷积操作的步伐# 非局部块的设置捕捉长距离的依赖关系有利于视频分析和图像分割没有池化可能是因为不需要降低复杂度NONLOCAL:LOCATION:[[[]],[[]],[[]],[[]]]# 非局部块的定位信息用于指定非局部模块的位置GROUP:[[1],[1],[1],[1]]# 每个非局部块的组数INSTANTIATION:softmax# 非局部块的实例化类型这里是softmax用于计算相似性权重除此之外还有Gaussian: 使用高斯函数来计算相似性Cosine: 使用余弦相似度来计算权重。# 批归一化参数对输入数据进行标准化BN:USE_PRECISE_STATS:False# 是否使用精确统计。False 表示使用近似统计NUM_BATCHES_PRECISE:200# 用于计算精确统计的批次数量# 优化器设置SOLVER:MOMENTUM:0.9# 优化器的动量系数用于加速SGD收敛WEIGHT_DECAY:1e-7# 权重衰减系数用于正则化OPTIMIZING_METHOD:sgd# 优化方法这里是随机梯度下降SGD# 模型架构配置MODEL:NUM_CLASSES:80# 模型输出的类别数量ARCH:slow# 模型架构类型这里是slow可能指代处理速度较慢的版本MODEL_NAME:ResNet# 模型的名称相对标准的resnet模型LOSS_FUNC:bce# 损失函数类型这里是二元交叉熵binary cross-entropyDROPOUT_RATE:0.5# Dropout层的丢弃率这里是50%用于防止过拟合HEAD_ACT:sigmoid# 输出层激活函数这里是sigmoid用于二分类任务# 测试配置TEST:ENABLE:True# 是否启用测试DATASET:ava# 使用的数据集名称BATCH_SIZE:8# 数据加载器的配置DATA_LOADER:NUM_WORKERS:2# 数据加载时使用的工作线程数量PIN_MEMORY:True# 是否将数据加载到GPU的固定内存中以提高效率# GPU配置NUM_GPUS:8# 使用的GPU数量# 数据分片配置NUM_SHARDS:1# 用于分布式训练1表示不进行数据分片# 随机种子用于初始化随机数生成器不同的种子会产生不同的随机数RNG_SEED:0# 随机数生成器的种子用于确保实验的可重复性# 输出目录设置OUTPUT_DIR:.代码运行逻辑从slowfast中找到最主要的运行函数也就是这个SlowFast-main/tools/run_net.pydemo_net.py该代码根据配置文件进行训练、测试和推理fromdemo_netimportdemo# 推理fromslowfast.config.defaultsimportassert_and_infer_cfgfromslowfast.utils.miscimportlaunch_job# 根据GPU数量选择单GPU或多GPU的执行路径fromslowfast.utils.parserimportload_config,parse_args# 加载配置解析命令行参数fromtest_netimporttest# 测试fromtrain_netimporttrain# 训练fromvisualizationimportvisualize# 对模型的权重和激活值进行可视化首先对参数进行解析通过四个条件语句判断配置文件中需要进行的任务训练、测试、可视化、推理# 如果启用了训练通过launch_job启动训练任务ifcfg.TRAIN.ENABLE:launch_job(cfgcfg,init_methodargs.init_method,functrain)# 如果启用了测试进行多视角测试ifcfg.TEST.ENABLE:# 如果配置文件中启用了 TensorBoard 并且启用了模型可视化或错误预测可视化启动可视化任务ifcfg.TENSORBOARD.ENABLEand(cfg.TENSORBOARD.MODEL_VIS.ENABLEorcfg.TENSORBOARD.WRONG_PRED_VIS.ENABLE):launch_job(cfgcfg,init_methodargs.init_method,funcvisualize)# 运行演示脚本ifcfg.DEMO.ENABLE:demo(cfg)train_net.py和test_net.py在本质上有一定的共同性因此在这里主要介绍train_net.py和demo_net.pytrain_net.py进行训练的代码代码结构importmathimportpprintimportnumpyasnpimportslowfast.models.lossesaslosses# 各种损失函数importslowfast.models.optimizerasoptim# 优化器importslowfast.utils.checkpointascu# 保存和加载模型的检查点importslowfast.utils.distributedasdu# 支持分布式训练importslowfast.utils.loggingaslogging# 提供日志记录importslowfast.utils.metricsasmetrics# 评估模型性能的指标importslowfast.utils.miscasmisc# 其他工具函数importslowfast.visualization.tensorboard_visastbimporttorchfromfvcore.nn.precise_bnimportget_bn_modules,update_bn_statsfromslowfast.datasetsimportloader# 数据加载、数据集的分割、批处理和数据增强fromslowfast.datasets.mixupimportMixUp# 数据增强fromslowfast.modelsimportbuild_model# 根据配置构建神经网络模型fromslowfast.models.contrastiveimport(contrastive_forward,contrastive_parameter_surgery,)# 对比学习的前向传播函数fromslowfast.utils.metersimportAVAMeter,EpochTimer,TrainMeter,ValMeter# 评估动作检测模型的性能计时器跟踪各种指标fromslowfast.utils.multigridimportMultigridSchedule# 多重网格训练改变模型分辨率和帧率等超参数来提高训练效率和模型性能分为下面五个主要的函数前四个都是在最后一个中被引用没有相互引用# 执行视频分类模型的单轮训练在一轮训练结束时记录和报告模型的训练状态deftrain_epoch(train_loader,model,optimizer,scaler,# 梯度缩放器train_meter,# 训练计量器记录和报告训练过程中的指标cur_epoch,# 当前训练的 epochcfg,writerNone,):# 在val数据集上进行验证defeval_epoch(val_loader,model,val_meter,cur_epoch,cfg,train_loader,writer):# 更新模型中BN层的统计数据确保模型在推理时使用的统计信息更加准确defcalculate_and_update_precise_bn(loader,model,num_iters200,use_gpuTrue):# 构建一个完整的训练系统只有在启用了多网格长周期训练后才调用该函数defbuild_trainer(cfg):# 训练代码deftrain(cfg):在看代码的过程中觉得比较重要的就是数据集调用和模型构建因此分为以下两个部分他们俩都是使用的注册类数据集调用如果要实现函数的跳转可以使用ctrl鼠标左键SlowFast-main/tools/train_net.py中fromslowfast.datasetsimportloader# 其中train_loader来自于一个加载数据集的函数train_loaderloader.construct_loader(cfg,train)# 其本质是torch.utils.data.DataLoader在SlowFast-main/slowfast/datasets/loader.pydatasetbuild_dataset(dataset_name,cfg,split)# 在不同数据集名称下都能正确的构建对应的数据集在SlowFast-main/slowfast/datasets/build.pydefbuild_dataset(dataset_name,cfg,split):namedataset_name.capitalize()# eg ava - AvareturnDATASET_REGISTRY.get(name)(cfg,split)# 获取注册表中对应的数据集类在SlowFast-main/slowfast/datasets/ava_dataset.pyDATASET_REGISTRY.register()classAva(torch.utils.data.Dataset):逻辑闭环。模型构建SlowFast-main/tools/train_net.py中# 根据配置构建模型对象存储模型的计算量和参数量modelbuild_model(cfg)ctrl鼠标左键单击build_modelSlowFast-main/slowfast/models/video_model_builder.py中MODEL_REGISTRY.register()classSlowFast(nn.Module):找到slowfast 的网络结构了我直接特喵的库库改demo_net.py这个代码也就是推理代码importtimeimportnumpyasnpimporttorchimporttqdmfromslowfast.utilsimportloggingfromslowfast.visualization.async_predictorimportAsyncDemo,AsyncVis# 异步推理和可视化fromslowfast.visualization.ava_demo_precomputed_boxesimport(AVAVisualizerWithPrecomputedBox,)# 用于基于预先计算的边框进行可视化特别适用于 AVA 数据集fromslowfast.visualization.demo_loaderimportThreadVideoManager,VideoManager# 管理视频帧的读取fromslowfast.visualization.predictorimportActionPredictor# 用于动作预测fromslowfast.visualization.video_visualizerimportVideoVisualizer# 视频的可视化展示分为这两个函数# 用于处理视频帧从帧提供器中获取视频帧进行动作识别并将结果可视化结合了多线程处理、异步推理和视频帧的实时处理。defrun_demo(cfg,frame_provider):# 执行推理defdemo(cfg):推理过程中主要分为这两种情况# 能够处理两种情况# 一种是使用预先计算的检测框进行可视化另一种是实时处理视频流ifcfg.DETECTION.ENABLEandcfg.DEMO.PREDS_BOXES!:# 实时处理视频流或网络摄像头else:starttime.time()我觉得在run_demo中很主要的就是这里的语句ifcfg.NUM_GPUS1:modelActionPredictor(cfgcfg,async_visasync_vis)# 会内嵌物体检测器else:modelAsyncDemo(cfgcfg,async_visasync_vis)# 异步动作预测但是也调用了上面的函数所以本质就是上面的函数ctrl鼠标左键单击ActionPredictor跳转到这里SlowFast-main/slowfast/visualization/predictor.py可以看到这里的目标检测模型使用的是detectron内置的目标检测模型这里在考虑换成yolo继续ctrl鼠标左键单击Detectron2Predictor跳转到在这个类中调用了DEMO中一些参数配置具体可以自己去看不做过多解释读取处理数据集也就是从这里开始SlowFast-main/slowfast/datasets/ava_dataset.py此代码用于加载和处理AVA数据集importloggingimportnumpyasnpimporttorchfrom.import(ava_helperasava_helper,cv2_transformascv2_transform,# 一些数据变换的函数transformastransform,# 图像处理和数据增强utilsasutils,)# 内置的一些函数包from.buildimportDATASET_REGISTRY# 注册数据集类可以看到在该文件中导入了四个内置的函数包其中ava_helper最重要因此在开始介绍ava_dataset.py之前先介绍一下该函数SlowFast-main/slowfast/datasets/ava_helper.py定义以下五个函数parse_bboxes_file在load_boxes_and_labels中被引用# 读取frame_lists文件夹下的文件defload_image_lists(cfg,is_train):returnimage_paths,video_idx_to_name# 返回两个列表分别是每个视频的帧路径和所有视频名称# 加载边界框和标签defload_boxes_and_labels(cfg,mode):logger.info(Finished loading annotations from: %s%, .join(ann_filenames))# 加载训练行为的文件和测试标注框的文件logger.info(Detection threshold: {}.format(detect_thresh))# 检测阈值logger.info(Number of unique boxes: %d%unique_box_count)# 目标框数量logger.info(Number of annotations: %d%count)# 注释数量returnall_boxes# 返回一个包含所有标注框的字典# 获取关键帧数据索引及其边界框和标签defget_keyframe_data(boxes_and_labels):returnkeyframe_indices,keyframe_boxes_and_labels# 返回关键帧的索引、边界框和标签# 获取使用的边界框数量defget_num_boxes_used(keyframe_indices,keyframe_boxes_and_labels):count0forvideo_idx,sec_idx,_,_inkeyframe_indices:countlen(keyframe_boxes_and_labels[video_idx][sec_idx])returncount# 获取每个时间段内的框数量并返回总数# 解析边界框注释文件将其整理成字典形式注释文件路径、是否包含真实边界框、阈值、采样率如果是1就是每帧都采样defparse_bboxes_file(ann_filenames,ann_is_gt_box,detect_thresh,boxes_sample_rate1):returnall_boxes,count,unique_box_count# 包含所有框数据的字典、有效标签的总数、框的数量继续介绍ava_dataset.py函数DATASET_REGISTRY.register()classAva(torch.utils.data.Dataset):def__init__(self,cfg,split):self.cfgcfg self._splitsplit# 数据集的分割类型self._sample_ratecfg.DATA.SAMPLING_RATE# 采样率self._video_lengthcfg.DATA.NUM_FRAMES# 视频帧数self._seq_lenself._video_length*self._sample_rate# 视频序列的总帧数self._num_classescfg.MODEL.NUM_CLASSES# 分类任务中的类别数# 数据增强相关配置self._data_meancfg.DATA.MEAN# 数据的均值self._data_stdcfg.DATA.STD# 标准差self._use_bgrcfg.AVA.BGR# 是否使用BGR色彩通道self.random_horizontal_flipcfg.DATA.RANDOM_FLIP# 是否使用随机水平翻转进行数据增强ifself._splittrain:# 设置训练或测试阶段的特定配置self._crop_sizecfg.DATA.TRAIN_CROP_SIZE# 裁剪图像的大小self._jitter_min_scalecfg.DATA.TRAIN_JITTER_SCALES[0]# 随机缩放因子self._jitter_max_scalecfg.DATA.TRAIN_JITTER_SCALES[1]self._use_color_augmentationcfg.AVA.TRAIN_USE_COLOR_AUGMENTATION# 是否使用颜色增强self._pca_jitter_onlycfg.AVA.TRAIN_PCA_JITTER_ONLY# 对图像进行PCA偏移增强self._pca_eigvalcfg.DATA.TRAIN_PCA_EIGVAL# PCA数据增强的特征值self._pca_eigveccfg.DATA.TRAIN_PCA_EIGVEC# 特征向量else:# 测试集self._crop_sizecfg.DATA.TEST_CROP_SIZE# 裁剪大小self._test_force_flipcfg.AVA.TEST_FORCE_FLIP# 翻转增强# 加载数据self._load_data(cfg)# 加载数据包括视频帧路径和对应的标注边界框和标签# 1、加载视频帧路径和标注数据边界框和标签# 2、验证标注数据和帧路径数量的一致性# 3、获取关键帧的索引和对应的标注数据# 4、计算在关键帧中使用的边界框数量# 5、打印数据集的摘要信息def_load_data(self,cfg):# 打印数据集摘要defprint_summary(self):# 数据集长度也就是视频的数量def__len__(self):# 视频数量属性propertydefnum_videos(self):returnlen(self._keyframe_indices)# 使用 OpenCV 作为后端对图像和边界框进行预处理。包括缩放、裁剪、随机翻转、颜色增强、归一化等操作。def_images_and_boxes_preprocessing_cv2(self,imgs,boxes):returnimgs,boxes# 输入图像列表和边界框数组返回处理后的图像和边界框# 使用 PyTorch 的方法对图像和边界框进行预处理。def_images_and_boxes_preprocessing(self,imgs,boxes):returnimgs,boxes# 输入图像列表和边界框数组返回处理后的图像和边界框# 为每个视频样本生成一个训练或测试所需的输入包括图像帧、对应的边界框、标签和其他元数据def__getitem__(self,idx):returnimgs,label_arrs,idx,torch.zeros(1),extra_data# 返回图像、标签数组、索引、占位符、额外的数据边界框、原始框、元数据后言祝大家科研顺利

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号