系统win11
软件anaconda3
CUDA version 12.0
第一步:新建虚拟环境python==3.8,直接从anaconda3里新建就可以
在prompt里激活环境
activate slowfast
第二步:安装pytorch
pip install torch==1.10.0+cu102 torchaudio==0.10.0+cu102 torchlibrosa==0.1.0 torchvision==0.11.1+cu102
第三步:下载并安装slowfast,fvcore,cocoapi,detectron2
下载
https://github.com/facebookresearch/SlowFast
https://github.com/facebookresearch/fvcore
https://github.com/philferriere/cocoapi
https://github.com/conansherry/detectron2
安装过程请参考自以下博文第三四五步,写得非常好:win10下detectron2编译安装方法及问题汇总_detectron2的安装nvcc 编译 cuda 源文件时出现了堆栈溢出的问题-CSDN博客
安装detectron2,在anaconda prompt里cd到detectron2的安装路径,编译安装
cd C:\softwaredownload\slowfast_need\detectron2-masterV2\detectron2-master
python setup.py build develop
安装过程中会提示缺什么包,就pip install什么包,直到编译成功。编译之后会在detectron2子文件夹生成一个.pyd文件
测试detectron2编译环境,新建一个test_windows_install.py文件,放在“C:\softwaredownload\slowfast_need\detectron2-masterV2\detectron2-master\tests”文件夹下,
test_windows_install.py代码内容请复制粘贴以下内容:
from detectron2.engine import DefaultPredictor
from detectron2.data import MetadataCatalog
from detectron2.config import get_cfg
from detectron2.utils.visualizer import ColorMode, Visualizer
from detectron2 import model_zoo
import cv2
import numpy as np
import requests
# Load an image
res = requests.get("https://live.staticflickr.com/700/33224654191_fdaee2e3f1_c_d.jpg")
image = np.asarray(bytearray(res.content), dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
config_file = 'COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml'
cfg = get_cfg()
cfg.merge_from_file(r'C:\softwaredownload\slowfast_need\detectron2-masterV2\detectron2-master\configs/'+config_file)#cfg.merge_from_file(model_zoo.get_config_file(config_file))
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.75 # Threshold
cfg.MODEL.WEIGHTS ='https://dl.fbaipublicfiles.com/detectron2/COCO-Detection/faster_rcnn_R_101_FPN_3x/137851257/model_final_f6e8b1.pkl'
#cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(config_file)
cfg.MODEL.DEVICE = "cpu" # cpu or cuda
# Create predictor
predictor = DefaultPredictor(cfg)
# Make prediction
output = predictor(image)
print(output)
v = Visualizer(image[:, :, ::-1],
scale=0.8,
metadata=MetadataCatalog.get(cfg.DATASETS.TRAIN[0]),
instance_mode=ColorMode.IMAGE
)
v = v.draw_instance_predictions(output["instances"].to("cpu"))
cv2.imshow('images', v.get_image()[:, :, ::-1])
cv2.waitKey(0)
如果运行过程中有以下报错,表示没有这个对象,需要从自己复制config文件路径
解决方案:
1,把cfg.merge_from_file(model_zoo.get_config_file(config_file))改成cfg.merge_from_file(r'C:\softwaredownload\slowfast_need\detectron2-masterV2\detectron2-master\configs/'+config_file)
2,把cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(config_file)改成cfg.MODEL.WEIGHTS ='https://dl.fbaipublicfiles.com/detectron2/COCO-Detection/faster_rcnn_R_101_FPN_3x/137851257/model_final_f6e8b1.pkl'
第2步是直接重新从官网找的模型权重
官网链接 选择的是R101-FPN,右键model复制链接即可粘贴到代码中
(上边的代码已经是解决了的。注释部分是原来的代码,原代码参考win10下detectron2编译安装方法及问题汇总_detectron2的安装nvcc 编译 cuda 源文件时出现了堆栈溢出的问题-CSDN博客)
运行结果如图:
第四步:编译slowfast
打开slowfast源码,找到setup.py文件,修改1个地方,把PIL改成pillow
安装slowfast
python setup.py build develop
conda install pywin32
在C:\softwaredownload\slowfast_need\SlowFast-main\demo\AVA下新建ava.json文件
{
"bend/bow (at the waist)": 0,
"crawl": 1,
"crouch/kneel": 2,
"dance": 3,
"fall down": 4,
"get up": 5,
"jump/leap": 6,
"lie/sleep": 7,
"martial art": 8,
"run/jog": 9,
"sit": 10,
"stand": 11,
"swim": 12,
"walk": 13,
"answer phone": 14,
"brush teeth": 15,
"carry/hold (an object)": 16,
"catch (an object)": 17,
"chop": 18,
"climb (e.g., a mountain)": 19,
"clink glass": 20,
"close (e.g., a door, a box)": 21,
"cook": 22,
"cut": 23,
"dig": 24,
"dress/put on clothing": 25,
"drink": 26,
"drive (e.g., a car, a truck)": 27,
"eat": 28,
"enter": 29,
"exit": 30,
"extract": 31,
"fishing": 32,
"hit (an object)": 33,
"kick (an object)": 34,
"lift/pick up": 35,
"listen (e.g., to music)": 36,
"open (e.g., a window, a car door)": 37,
"paint": 38,
"play board game": 39,
"play musical instrument": 40,
"play with pets": 41,
"point to (an object)": 42,
"press": 43,
"pull (an object)": 44,
"push (an object)": 45,
"put down": 46,
"read": 47,
"ride (e.g., a bike, a car, a horse)": 48,
"row boat": 49,
"sail boat": 50,
"shoot": 51,
"shovel": 52,
"smoke": 53,
"stir": 54,
"take a photo": 55,
"text on/look at a cellphone": 56,
"throw": 57,
"touch (an object)": 58,
"turn (e.g., a screwdriver)": 59,
"watch (e.g., TV)": 60,
"work on a computer": 61,
"write": 62,
"fight/hit (a person)": 63,
"give/serve (an object) to (a person)": 64,
"grab (a person)": 65,
"hand clap": 66,
"hand shake": 67,
"hand wave": 68,
"hug (a person)": 69,
"kick (a person)": 70,
"kiss (a person)": 71,
"lift (a person)": 72,
"listen to (a person)": 73,
"play with kids": 74,
"push (another person)": 75,
"sing to (e.g., self, a person, a group)": 76,
"take (an object) from (a person)": 77,
"talk to (e.g., self, a person, a group)": 78,
"watch (a person)": 79
}
参考自Windows 11 安装 SlowFast_slowfast_32x2_r101_50_50.pkl百度网盘-CSDN博客
下载模型权重文件modelzoo官网,选第3个,点link,下载到C:/softwaredownload/slowfast_need/SlowFast-main/demo/models/SLOWFAST_32x2_R101_50_50.pkl
第五步:修改C:\softwaredownload\slowfast_need\SlowFast-main\demo\AVA\SLOWFAST_32x2_R101_50_50.yaml
用记事本打开.yaml文件,修改这几行
添加模型路径
CHECKPOINT_FILE_PATH: "C:/softwaredownload/slowfast_need/SlowFast-main/demo/models/SLOWFAST_32x2_R101_50_50.pkl" #path to pretrain model
添加标签路径
LABEL_FILE_PATH: "C:/softwaredownload/slowfast_need/SlowFast-main/demo/AVA/ava.json" # Add local label file path here.
你输入的视频路径,写绝对路径
INPUT_VIDEO: "C:/softwaredownload/slowfast_need/SlowFast-main/vinput/1.mp4"
输出的是视频路径
OUTPUT_FILE: "C:/softwaredownload/slowfast_need/SlowFast-main/voutput/1_output.mp4"
注释掉以下四句
#TENSORBOARD:
# MODEL_VIS:
# TOPK: 2
#WEBCAM: -1
完整的修改后的文件如下:
TRAIN:
ENABLE: False
DATASET: ava
BATCH_SIZE: 16
EVAL_PERIOD: 1
CHECKPOINT_PERIOD: 1
AUTO_RESUME: True
CHECKPOINT_FILE_PATH: "C:/softwaredownload/slowfast_need/SlowFast-main/demo/models/SLOWFAST_32x2_R101_50_50.pkl" #path to pretrain model
CHECKPOINT_TYPE: pytorch
DATA:
NUM_FRAMES: 32
SAMPLING_RATE: 2
TRAIN_JITTER_SCALES: [256, 320]
TRAIN_CROP_SIZE: 224
TEST_CROP_SIZE: 256
INPUT_CHANNEL_NUM: [3, 3]
DETECTION:
ENABLE: True
ALIGNED: False
AVA:
BGR: False
DETECTION_SCORE_THRESH: 0.8
TEST_PREDICT_BOX_LISTS: ["person_box_67091280_iou90/ava_detection_val_boxes_and_labels.csv"]
SLOWFAST:
ALPHA: 4
BETA_INV: 8
FUSION_CONV_CHANNEL_RATIO: 2
FUSION_KERNEL_SZ: 5
RESNET:
ZERO_INIT_FINAL_BN: True
WIDTH_PER_GROUP: 64
NUM_GROUPS: 1
DEPTH: 101
TRANS_FUNC: bottleneck_transform
STRIDE_1X1: False
NUM_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: [[[], []], [[], []], [[6, 13, 20], []], [[], []]]
GROUP: [[1, 1], [1, 1], [1, 1], [1, 1]]
INSTANTIATION: dot_product
POOL: [[[2, 2, 2], [2, 2, 2]], [[2, 2, 2], [2, 2, 2]], [[2, 2, 2], [2, 2, 2]], [[2, 2, 2], [2, 2, 2]]]
BN:
USE_PRECISE_STATS: False
NUM_BATCHES_PRECISE: 200
SOLVER:
MOMENTUM: 0.9
WEIGHT_DECAY: 1e-7
OPTIMIZING_METHOD: sgd
MODEL:
NUM_CLASSES: 80
ARCH: slowfast
MODEL_NAME: SlowFast
LOSS_FUNC: bce
DROPOUT_RATE: 0.5
HEAD_ACT: sigmoid
TEST:
ENABLE: False
DATASET: ava
BATCH_SIZE: 8
DATA_LOADER:
NUM_WORKERS: 2
PIN_MEMORY: True
NUM_GPUS: 1
NUM_SHARDS: 1
RNG_SEED: 0
OUTPUT_DIR: .
#TENSORBOARD:
# MODEL_VIS:
# TOPK: 2
DEMO:
ENABLE: True
LABEL_FILE_PATH: "C:/softwaredownload/slowfast_need/SlowFast-main/demo/AVA/ava.json" # Add local label file path here.
INPUT_VIDEO: "C:/softwaredownload/slowfast_need/SlowFast-main/vinput/1.mp4"
OUTPUT_FILE: "C:/softwaredownload/slowfast_need/SlowFast-main/voutput/1_output.mp4"
#WEBCAM: -1
DETECTRON2_CFG: "COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml"
DETECTRON2_WEIGHTS: detectron2://COCO-Detection/faster_rcnn_R_50_FPN_3x/137849458/model_final_280758.pkl
在slowfast根目录下运行
cd C:\softwaredownload\slowfast_need\SlowFast-main
python .\tools\run_net.py --cfg .\demo\AVA\SLOWFAST_32x2_R101_50_50.yaml
_______________________________________
以下是踩坑记录:
1,首先,测试detectron2,出现报错
ImportError:DLL load failed while importing _C:找不到指定的程序路径
原因:解压detectron2压缩包时,丢了一个东西,应该就是这个DLL文件
解决方案:重新解压安装包,重新安装编译
如果抱的错是找不到_C,那么需要把_C文件复制到你的运行目录下。
2,运行slowfast,出现报错
OSError: Video C:/softwaredownload/slowfast_need/SlowFast-main/vinput/1.mp4 cannot be opened
原因:视频重命名的时候直接打“1.mp4”,打“1”就行了,“.mp4”是后缀
解决方案:重命名,记得把路径打对了
3,测试detectron2和slowfast,出现报错
AttributeError:module 'detectron2.model_zoo' has no attribute 'get_config_file'
原因:我安装的版本时0.1,也许是版本过低,需要在报错的.py文件下修改代码,先寻找configs的路径,把报错部分改成自己的路径+config_file
例如我在运行slowfast的时候就报了这个错误,
解决方案,找到predictor.py,修改报错的第174行。注释部分是原本的代码
(注:因为我在自己电脑的cpu运行,所以把cuda也改成cpu了,因为我的电脑cuda带不动,会出现:RuntimeError: Not compiled with GPU support)
self.cfg = get_cfg()
self.cfg.merge_from_file(r'C:\softwaredownload\slowfast_need\detectron2-masterV2\detectron2-master\configs/'+cfg.DEMO.DETECTRON2_CFG)
#self.cfg.merge_from_file(
# model_zoo.get_config_file(cfg.DEMO.DETECTRON2_CFG)
#)
self.cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = cfg.DEMO.DETECTRON2_THRESH
#self.cfg.MODEL.WEIGHTS ='https://dl.fbaipublicfiles.com/detectron2/COCO-Detection/faster_rcnn_R_101_FPN_3x/137851257/model_final_f6e8b1.pkl'
self.cfg.MODEL.WEIGHTS = cfg.DEMO.DETECTRON2_WEIGHTS
self.cfg.INPUT.FORMAT = cfg.DEMO.INPUT_FORMAT
if cfg.NUM_GPUS and gpu_id is None:
gpu_id = torch.cuda.current_device()
self.cfg.MODEL.DEVICE = "cpu"
#self.cfg.MODEL.DEVICE = (
# "cuda:{}".format(gpu_id) if cfg.NUM_GPUS > 0 else "cpu"
#)
4,测试slowfast出现报错:typeError:cannot unpack non-iterable NoneType object
原因:AVA.json文件里除了要复制的东西,不能写其他东西。把多余的删了,比如抬头默认的时间用户等。
# -*- coding: utf-8 -*-
"""
Created on Sat Mar 9 21:03:46 2024
@author: someone
"""
5,最后,运行slowfast报错
RuntimeError: CUDA out of memory. Tried to allocate 16.00 MiB (GPU 0; 4.00 GiB total capacity; 3.26 GiB already allocated; 0 bytes free; 3.44 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
逐一排查以上错误并解决后,顺畅无比,马上就要轻舟已过万重山了,谁知最后内存不足,泪了。
参考资料
【slowfast 代码解析 输出检测数据】_slowfast导出数据-CSDN博客
Windows 11 安装 SlowFast_slowfast_32x2_r101_50_50.pkl百度网盘-CSDN博客
【SlowFast复现】SlowFast Networks for Video Recognition复现代码 使用自己的视频进行demo检测_经典视频编码复现-CSDN博客
detectron2和slowfast的安装与使用_oserror: video 0 cannot be opened-CSDN博客
win10下detectron2编译安装方法及问题汇总_detectron2的安装nvcc 编译 cuda 源文件时出现了堆栈溢出的问题-CSDN博客
win10 下配置 slowfast 环境_slowfast算法复现windows-CSDN博客
Detectron2安装踩坑记录(比较详细版)-CSDN博客
win10安装detectron2_"no instance of overloaded function \"std::min\" m-CSDN博客