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.py的build_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)