文章目录
- 前言
- 一、Kaggle克隆仓库
- 1、克隆项目
- 2、查看目录
- 二、安装依赖
- 三、文件的上传、复制、转移操作
- 1.上传.pth文件到input目录
- 2、将权重文件从input目录转移到工作目录
- 三、修改工作目录里的文件内容
- 1、修改demo_camera.py内容
- 四、运行!
前言
想跑一些深度学习的项目,但是电脑没有显卡,遂看向云服务器Kaggle,这里可以每周免费使用30h的GPU算力,效果确实不错。
本人之前尝试过google colab,但是
- 时不时就要你人机验证
- 连接容易断开
- 文件操作有些麻烦
- 还要挂载google drive云盘
- 还要魔法
用过Kaggle之后,不得不说是真香,它是不需要魔法的。
但是刚上手Kaggle的DPers可能还不是很熟悉一些基本命令操作,那么这篇文章就总结了一些常见操作,常见问题,希望对你有所帮助。
一、Kaggle克隆仓库
1、克隆项目
一般在kaggle的notebook里面输入控制台类的代码,前面要加上!当然也有特例,我们后面再说
! git init
! git clone https://github.com/Hzzone/pytorch-openpose.git
2、查看目录
克隆下来的项目,放在了output下,目录为kaggle/working
注意kaggle/working也是我们默认的工作目录,你可以输入下述代码来验证
import os
os.getcwd()
二、安装依赖
! pip install -r /kaggle/working/pytorch-openpose/requirements.txt
这里要输入requirements.txt的完整路径,可以在右侧直接复制
三、文件的上传、复制、转移操作
github上这个姿态估计的项目需要权重文件,但是仓库里没有直接放进去,通过网盘给到了.pth权重文件。那么现在我们应该如何将电脑中的.pth文件上传到工作目录里呢
1.上传.pth文件到input目录
比较简单,点击upload->New Dataset->选择本地文件直接上传,
一个项目可以包含多个datasets,我这里新建了2个,并分别上传了一个文件,下面是目录结构:
2、将权重文件从input目录转移到工作目录
将权重文件从input目录转移到output下的kaggle/working工作目录
# import module we'll need to import our custom module
from shutil import copyfilecopyfile(src = "/kaggle/input/hand-pose-model-pth/hand_pose_model.pth", dst = "/kaggle/working/pytorch-openpose/model/hand_pose_model.pth")
copyfile(src = "/kaggle/input/hand-pose-model-pth/body_pose_model.pth", dst = "/kaggle/working/pytorch-openpose/model/body_pose_model.pth")
注意,目标目录下的.pth文件不用提前建立,它会自动生成
三、修改工作目录里的文件内容
按理说,我现在直接可以输入! python /kaggle/working/pytorch-openpose/demo_camera.py
进行demo测试了,但是会报错找不到权重文件,因为人家项目里写的是相对路径,但是说实话,相对路径在kaggle的notebook执行的时候,会识别不出来
所以最保险的做法:
全部换成绝对路径
这时要修改demo_camera.py的文件内容,如何修改呢?
1、修改demo_camera.py内容
现在的工作路径是
我们cd 到demo_camera.py文件所在文件夹下
在本地修改demo_camera.py,修改为绝对路径
将这个文件里所有内容复制到%%writefile demo_camera.py
下面,什么意思?就是相当于把demo_camera.py的内容进行了覆盖。
%%writefile demo_camera.py
import cv2
import matplotlib.pyplot as plt
import copy
import numpy as np
import torchfrom src import model
from src import util
from src.body import Body
from src.hand import Handbody_estimation = Body('/kaggle/working/pytorch-openpose/model/body_pose_model.pth')
hand_estimation = Hand('/kaggle/working/pytorch-openpose/model/hand_pose_model.pth')print(f"Torch device: {torch.cuda.get_device_name()}")cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
while True:ret, oriImg = cap.read()candidate, subset = body_estimation(oriImg)canvas = copy.deepcopy(oriImg)canvas = util.draw_bodypose(canvas, candidate, subset)# detect handhands_list = util.handDetect(candidate, subset, oriImg)all_hand_peaks = []for x, y, w, is_left in hands_list:peaks = hand_estimation(oriImg[y:y+w, x:x+w, :])peaks[:, 0] = np.where(peaks[:, 0]==0, peaks[:, 0], peaks[:, 0]+x)peaks[:, 1] = np.where(peaks[:, 1]==0, peaks[:, 1], peaks[:, 1]+y)all_hand_peaks.append(peaks)canvas = util.draw_handpose(canvas, all_hand_peaks)cv2.imshow('demo', canvas)#一个窗口用以显示原视频if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()
四、运行!
输入
! python /kaggle/working/pytorch-openpose/demo_camera.py
当然,你可能遇到其他代码上的bug,这就不是kaggle平台的问题啦
这就需要你擦亮你的眼睛认认真真debug啦