目錄
- 前言
- 一,ava相關文件準備
-
- 1.1 空間準備(500G)
- 1.2 整體ava文件結構
- 1.3 frames文件
- 1.4 frame_lists 文件
- 1.5 annotations 文件
- 二,預訓練模型
- 三,配置文件
-
- 3.1 創建新的yaml文件
- 3.2 yaml文件解釋
- 四,訓練
前言
b站視頻講解
slowfast官網
之前寫了一個博客,是用slowfast的檢測一個自己的視頻的demo:
【SlowFast復現】SlowFast Networks for Video Recognition復現代碼 使用自己的視頻進行demo檢測
我又花了2個月時間熟悉slowfast的框架,今天終于把slowfast的訓練和數據集這一塊跑通了。
這篇博客說一下slowfast的訓練過程,這個訓練耗時很長,難點體現在訓練的數據量巨大,我用了1塊GPU,訓練了2個視頻,估計花了1小時左右,保守估計,要把全部訓練完,也就是299個視頻,需要150小時左右,也就是6.25天(我沒有訓練完,只是拿了2個視頻來訓練,而且用的訓練的模型是預訓練模型,如果不用這個與訓練模型,會花更多時間)
一,ava相關文件準備
1.1 空間準備(500G)
首先 在電腦上找一個空間很大的地方,因為ava相關文件要占很大的空間,我花了404G(沒有視頻,把視頻裁剪為圖片幀)
1.2 整體ava文件結構
下面是官網的結構圖:
ava
|_ frames
| |_ [video name 0]
| | |_ [video name 0]_000001.jpg
| | |_ [video name 0]_000002.jpg
| | |_ ...
| |_ [video name 1]
| |_ [video name 1]_000001.jpg
| |_ [video name 1]_000002.jpg
| |_ ...
|_ frame_lists
| |_ train.csv
| |_ val.csv
|_ annotations|_ [official AVA annotation files]|_ ava_train_predicted_boxes.csv|_ ava_val_predicted_boxes.csv
首先,在創建一個文件夾:ava,然后在ava文件下創建frames、frame_lists、annotations三個文件夾。
1.3 frames文件
在frames文件下,存放的視頻的的圖片幀,制作過程參考官網
1.4 frame_lists 文件
這里只存放了兩個文件:train.csv、val.csv
下載地址:train.csv、val.csv
1.5 annotations 文件
這里不要使用官網的默認版本,采用最新的2.2版本,官網有一個下載的鏈接:https://dl.fbaipublicfiles.com/pyslowfast/annotation/ava/ava_annotations.tar
下載后,解壓(我是在ubuntu下解壓的),使用tree查看其結構:
├── ava_annotations
│ ├── ava_action_list_v2.1_for_activitynet_2018.pbtxt
│ ├── ava_action_list_v2.2_for_activitynet_2019.pbtxt
│ ├── ava_action_list_v2.2.pbtxt
│ ├── ava_included_timestamps_v2.2.txt
│ ├── ava_test_excluded_timestamps_v2.1.csv
│ ├── ava_test_excluded_timestamps_v2.2.csv
│ ├── ava_test_v2.2.csv
│ ├── ava_train_excluded_timestamps_v2.1.csv
│ ├── ava_train_excluded_timestamps_v2.2.csv
│ ├── ava_train_v2.1.csv
│ ├── ava_train_v2.2.csv
│ ├── ava_val_excluded_timestamps_v2.1.csv
│ ├── ava_val_excluded_timestamps_v2.2.csv
│ ├── ava_val_v2.1.csv
│ ├── ava_val_v2.2.csv
│ ├── person_box_67091280_iou75
│ │ ├── ava_detection_test_boxes_and_labels.csv
│ │ ├── ava_detection_train_boxes_and_labels_include_negative.csv
│ │ ├── ava_detection_train_boxes_and_labels_include_negative_v2.1.csv
│ │ ├── ava_detection_train_boxes_and_labels_include_negative_v2.2.csv
│ │ ├── ava_detection_val_boxes_and_labels.csv
│ │ ├── ava_detection_val_for_training_boxes_and_labels_include_negative.csv
│ │ └── ava_detection_val_for_training_boxes_and_labels_include_negative_v2.2.csv
│ ├── person_box_67091280_iou90
│ │ ├── ava_action_list_v2.1_for_activitynet_2018.pbtxt
│ │ ├── ava_detection_test_boxes_and_labels.csv
│ │ ├── ava_detection_train_boxes_and_labels_include_negative.csv
│ │ ├── ava_detection_train_boxes_and_labels_include_negative_v2.1.csv
│ │ ├── ava_detection_train_boxes_and_labels_include_negative_v2.2.csv
│ │ ├── ava_detection_val_boxes_and_labels.csv
│ │ ├── ava_detection_val_for_training_boxes_and_labels_include_negative.csv
│ │ ├── ava_detection_val_for_training_boxes_and_labels_include_negative_v2.1.csv
│ │ ├── ava_detection_val_for_training_boxes_and_labels_include_negative_v2.2.csv
│ │ ├── ava_train_predicted_boxes.csv
│ │ ├── ava_train_v2.1.csv
│ │ ├── ava_val_excluded_timestamps_v2.1.csv
│ │ ├── ava_val_predicted_boxes.csv -> ava_detection_val_boxes_and_labels.csv
│ │ ├── ava_val_v2.1.csv
│ │ ├── test.csv
│ │ ├── train.csv
│ │ └── val.csv
│ ├── test.csv
│ ├── train.csv
│ └── val.csv
└── ava_annotations.tar
將ava_annotations下的所有文件復制到/ava/annotations/中。
二,預訓練模型
三,配置文件
3.1 創建新的yaml文件
在/SlowFast/configs/AVA/下創建一個新的yaml文件:SLOWFAST_32x2_R50_SHORT3.yaml,如下圖
然后將下面的代碼復制到SLOWFAST_32x2_R50_SHORT3.yaml中
TRAIN:ENABLE: TrueDATASET: avaBATCH_SIZE: 2 #64EVAL_PERIOD: 5CHECKPOINT_PERIOD: 1AUTO_RESUME: TrueCHECKPOINT_FILE_PATH: '/home/lxn/0yangfan/SlowFast/configs/AVA/c2/SLOWFAST_32x2_R101_50_50s.pkl' #path to pretrain modelCHECKPOINT_TYPE: caffe2
DATA:NUM_FRAMES: 32SAMPLING_RATE: 2TRAIN_JITTER_SCALES: [256, 320]TRAIN_CROP_SIZE: 224TEST_CROP_SIZE: 224INPUT_CHANNEL_NUM: [3, 3]PATH_TO_DATA_DIR: '/disk6T/ava'
DETECTION:ENABLE: TrueALIGNED: True
AVA:FRAME_DIR: '/disk6T/ava/frames'FRAME_LIST_DIR: '/disk6T/ava/frame_lists'ANNOTATION_DIR: '/disk6T/ava/annotations'#LABEL_MAP_FILE: 'ava_action_list_v2.1_for_activitynet_2018.pbtxt'#0GROUNDTRUTH_FILE: 'ava_val_v2.1.csv'#TRAIN_GT_BOX_LISTS: ['ava_train_v2.1.csv']DETECTION_SCORE_THRESH: 0.8TRAIN_PREDICT_BOX_LISTS: ["ava_train_v2.2.csv","person_box_67091280_iou90/ava_detection_train_boxes_and_labels_include_negative_v2.2.csv",]#TRAIN_PREDICT_BOX_LISTS: ["ava_train_predicted_boxes.csv"]TEST_PREDICT_BOX_LISTS: ["person_box_67091280_iou90/ava_detection_val_boxes_and_labels.csv"]#TEST_PREDICT_BOX_LISTS: ["ava_test_predicted_boxes.csv"]#EXCLUSION_FILE: "ava_train_excluded_timestamps_v2.1.csv"SLOWFAST:ALPHA: 4BETA_INV: 8FUSION_CONV_CHANNEL_RATIO: 2FUSION_KERNEL_SZ: 7
RESNET:ZERO_INIT_FINAL_BN: TrueWIDTH_PER_GROUP: 64NUM_GROUPS: 1DEPTH: 50TRANS_FUNC: bottleneck_transformSTRIDE_1X1: FalseNUM_BLOCK_TEMP_KERNEL: [[3, 3], [4, 4], [6, 6], [3, 3]]SPATIAL_DILATIONS: [[1, 1], [1, 1], [1, 1], [2, 2]]SPATIAL_STRIDES: [[1, 1], [2, 2], [2, 2], [1, 1]]
NONLOCAL:LOCATION: [[[], []], [[], []], [[], []], [[], []]]GROUP: [[1, 1], [1, 1], [1, 1], [1, 1]]INSTANTIATION: dot_productPOOL: [[[1, 2, 2], [1, 2, 2]], [[1, 2, 2], [1, 2, 2]], [[1, 2, 2], [1, 2, 2]], [[1, 2, 2], [1, 2, 2]]]
BN:USE_PRECISE_STATS: FalseNUM_BATCHES_PRECISE: 200
SOLVER:BASE_LR: 0.1LR_POLICY: steps_with_relative_lrsSTEPS: [0, 10, 15, 20]LRS: [1, 0.1, 0.01, 0.001]MAX_EPOCH: 20MOMENTUM: 0.9WEIGHT_DECAY: 1e-7WARMUP_EPOCHS: 5.0WARMUP_START_LR: 0.000125OPTIMIZING_METHOD: sgd
MODEL:NUM_CLASSES: 80ARCH: slowfastMODEL_NAME: SlowFastLOSS_FUNC: bceDROPOUT_RATE: 0.5HEAD_ACT: sigmoid
TEST:ENABLE: FalseDATASET: avaBATCH_SIZE: 8
DATA_LOADER:NUM_WORKERS: 2PIN_MEMORY: True
NUM_GPUS: 1
NUM_SHARDS: 1
RNG_SEED: 0
OUTPUT_DIR: .
3.2 yaml文件解釋
TRAIN
1.1. ENABLE: True。這里將TRAIN設置為TRUE,同樣的,也要TEST.ENABLE設置為False(我們只需要訓練的過程)
1.2 BATCH_SIZE: 2 #64.這里batch_size是由于我的電腦顯存不夠,只能設置為2,如果大家的顯存夠大,可以把這個batch_size設置的大一些。
1.3 CHECKPOINT_FILE_PATH: ‘/home/lxn/0yangfan/SlowFast/configs/AVA/c2/SLOWFAST_32x2_R101_50_50s.pkl’ 這里放的是預訓練模型的位置DATA
2.1 PATH_TO_DATA_DIR: ‘/disk6T/ava’ 這里是ava文件的位置
其他也比較簡單,大家就自己理解了。
四,訓練
python tools/run_net.py --cfg configs/AVA/SLOWFAST_32x2_R50_SHORT3.yaml
總結
以上是生活随笔為你收集整理的【slowfast复现 训练】训练过程 制作ava数据集 复现 SlowFast Networks for Video Recognition 训练 train的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。