mmskeleton基于人体关键点的实时跟踪与识别代码复现

1. 环境搭建

conda create -n mmskeleton_zhw
conda activate mmskeleton_zhw
cd /mnt/hdd2/home_old/home/lcm/Code/mygit/mmskeleton/
pip3 install -r requirements.txt
conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=11.3 -c pytorch -c conda-forge
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

*cuda版本为11.4,没有11.4对应的pytorch,故安装cu11.3

问题一:conda命令不存在

解决:

vim ~/.bashrc
#按e进入内容,按a编辑,在最后一行加入下一句
export PATH=~/home/anaconda3/bin:$PATH
#按ESC退出编辑,shift + :wq保存并退出
source ~/.bashrc

问题二:conda搭建完环境activate时提示错误

CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.

解决:当root前出现(base)表示可以激活conda虚拟环境

conda init bash

问题三:根据requirement下载torch库太慢

解决:寻找对应cuda版本的torch下载指令https://pytorch.org/get-started/previous-versions/

问题四:下载opencv时太慢

解决:采用清华源

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

2. 运行代码

./mycode/multi_fusion.py为例

python setup.py install
sh setup.sh

cd mycode #一定需要进入该路径
python multi_fusion.py

需要显示图像则需要调用./mycode/render/myrender.py。将line 579的render_foot_keypoints()注释去除;并修改myrender.py中的renderFootKeypoints()(line 166)添加以下语句,使处理过的图像保存到./mycode/test1.jpg。

foot = cv2.circle(image, (foot_points[0], foot_points[1]), 4, (0, 0, 255), -1)#cv2.circle(image, center, radius, color, thickness)
cv2.imwrite('/mnt/hdd2/home_old/home/lcm/Code/mygit/mmskeleton/mycode/test1.jpg', foot)###################################
cv2.waitKey(0)
cv2.destroyAllWindows()

解决措施参考了http://t.csdn.cn/jNIPu

问题一:提示找不到mmcv库

ModuleNotFoundError: No module named 'mmcv'

解决:

pip install mmcv

问题二:pycocotools

ImportError: mmskeleton.utils.third_party attempted to use a functionality that requires module pycocotools, but it couldn't be loaded. Please install pycocotools and retry.

解决:到mmskeleton/utils/third_party.py

COCO = lazy_import.lazy_module("pycocotools.COCO")
COCOeval = lazy_import.lazy_module("pycocotools.COCOeval")

改成

COCO = lazy_import.lazy_module("pycocotools.coco.COCO")
COCOeval = lazy_import.lazy_module("pycocotools.cocoeval.COCOeval")

并在mmskeleton/datasets/coco.py

from pycocotools import COCO, COCOeval

改成

from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval

问题三:提示错误

OSError: libopencv_core.so.3.2: cannot open shared object file: No such file or directory

解决:未安装opencv

sudo apt-get install libopencv-dev

问题四:无法从网站下载模型

Exception:

==================================================
MMSkeleton fail to load checkpoint from url:
    https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmskeleton/models/pose_estimation/pose_hrnet_w32_256x192-76ea353b.pth
Please check your network connection. Or manually download checkpoints according to the instructor:
    https://github.com/open-mmlab/mmskeleton/blob/master/doc/MODEL_ZOO.md

解决:从https://github.com/open-mmlab/mmskeleton/blob/master/doc/MODEL_ZOO.md下载对应pth放到/mnt/hdd2/home_old/home/lcm/.cache/torch/checkpoints/

mmskeleton/utils/checkpoints.py中的load_checkpoint()函数改成如下,即将filename改成已下载模型的路径;

def load_checkpoint(model, filename, *args, **kwargs):
    try:
        filename = get_mmskeleton_url(filename)
        filename= "/mnt/hdd2/home_old/home/lcm/.cache/torch/checkpoints/pose_hrnet_w32_256x192-76ea353b.pth"######################
        return mmcv_load_checkpoint(model, filename, *args, **kwargs)
    except (urllib.error.HTTPError, urllib.error.URLError) as e:
        raise Exception(url_error_message.format(filename)) from e

最后将multi_fusion.pybuild_skeleton()函数中的cache_checkpoints()(line 83)注释掉。

#cache_checkpoint(estimation_cfg.checkpoint_file)

问题五:内存不够

RuntimeError: CUDA error: out of memory
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.

解决:因为当前主机只有一块gpu,将multi_fusion.py主函数调用build_skeleton()时(line 308)所用start_gpu从1改成0;并将worker_per_gpu (line 280)从3改成1。

worker_per_gpu = 1 ############################3

view_assiatant = Process(target=build_skeleton, args=("Process-1", detection_cfg, estimation_cfg, tracker_cfg,
                             video_dir_list[1], model_cfg, checkpoint, result_assistant, 0, gpus, worker_per_gpu, 1000))

问题六:调用worker进行人体关键点估计时input变量数不对

File "multi_fusion.py", line 28, in worker
    idx, image, frame_read_time = inputs.get()
ValueError: not enough values to unpack (expected 3, got 2)

解决:其实标志着该程序处理完毕(line 215、587)

# send finish signal
    for p in procs:
        inputs.put((-1, None))
    # wait to finish
    for p in procs:
        p.join() 

三、运行其他mycode

以./mycode/multi_person.py为例,只需要做如下三个修改可以直接运行。

# 运行代码
cd mycode
python multi_person.py

修改1:将build_skeleton()中用到的cache_checkpoints(line 88)注释

# cache_checkpoint(estimation_cfg.checkpoint_file) ###############将该行注释

修改2:主函数中将worker_per_gpu改成1,并在用到build_skeleton(line314)处将start_gpu由idx改成0:

view_p = Process(target=build_skeleton, 
            args=("Process-"+str(idx+1), detection_cfg, estimation_cfg, tracker_cfg, video_dir_list[idx],
            model_cfg, checkpoint, result, 0, gpus, worker_per_gpu, 1000))

修改3:调用renderFootKeypoints函数(line 407)

renderFootKeypoints(curr_frame, homo_foot)

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值