前言
很多人要跑深度学习,但是电脑配置不够,我的3080也要一天,所以想白嫖资源。先用了谷歌的colab,但是数据量太大了,没跑多少epoch就资源限制了。所以转到用Kaggle了。以下内容是我在Kaggle上部署自己的模型(我用的是yolov7)上的工作和遇到的坑,希望可以帮助到大家。
先在本地确定自己的模型能够运行!!!然后复制一份进行Kaggle部署
操作流程
1.首先注册Kaggle
注册后想要使用GPU需要绑定手机号,流程如下:
点击右上角头像->settings->Phone verification,输入手机号,进行人机验证,获取验证码并绑定。
可能出现不显示google验证,用梯子就好,不行再刷新试试 还不行可以参考这个帖子Kaggle注册方法,解决人机验证问题,我没试过
2.提前想好模型
和数据集
在Kaggle里dataset中的名字(要6字符及以上)
这是我的模型和数据集名称和文件目录结构,仅供参考
我的数据集叫dataset,模型叫yolov7
Kaggle的模型可以上传到Dataset里进行运行,1000个文件以上需要打包成zip文件
3.上传数据集
3.1更改yaml里的路径
因为我用的是自己的数据,所以要更改dataset.yaml文件,路径格式为/kaggle/input/自己的数据集名称
,我这里是dataset
3.2更改train、val和test的内容
以train.txt为例:
路径为/kaggle/input/自己的数据集名称
加上自己的文件目录结构:
3.3上传数据集
新建数据集:Creat-> New Dataset,把自己的数据集打包成zip上传
数据集名称就是第二步提前想好的名称(我这里是dataset)
上传之后要等待解压
4.上传模型
4.1更改导入路径
更改所有涉及到自己工具包的py文件导入路径,以yolo.py为例:
将所有自己包的路径更改成模型名称.自己的包名
(我这里是yolov7)
注意是所有涉及自己包的路径都要改
yolo7里有根文件夹的train.py和test.py(其他的我还没用到,用的话也要改) models下的common.py,experimental.py和yolo.py utils下的autoanchor.py,datasets.py,general.py,loss.py和plots.py
4.2更改dataset.py
因为Kaggle里的input只能输入不能输出,但是yolov7需要对图片进行处理,生成cache文件。所以需要改dataset.py更改cache输出路径(390行左右)
其他需要在上传模型里写入文件的操作也同理 我目前只用了yolov7,其他的欢迎在评论区补充
# Check cache
self.label_files = img2label_paths(self.img_files) # labels
p_path = Path(p)
base_cache_path = Path("/kaggle/working")
# cache_path = (p if p.is_file() else Path(self.label_files[0]).parent).with_suffix('.cache') # cached labels
if p_path.is_file():
cache_path = base_cache_path / (p_path.name.split('.')[0]+'.cache')
else:
cache_path = base_cache_path / (p_path.name.split('.')[0]+'.cache')
print('cache_path:', cache_path)
if cache_path.is_file():
cache, exists = torch.load(cache_path), True # load
#if cache['hash'] != get_hash(self.label_files + self.img_files) or 'version' not in cache: # changed
# cache, exists = self.cache_labels(cache_path, prefix), False # re-cache
else:
cache, exists = self.cache_labels(cache_path, prefix), False # cache
4.3上传模型
同3.3,一样把模型上传到dataset里
5.准备开跑
5.1新建一个notebook并导入模型和数据集
点击Creat-> New Notebook,左上角一串字母数字那里可以改名
点击右侧 Add Input -> (从your work里)添加自己的模型和数据集(我这里是yolov7和dataset),要等解压挺长时间
点击Session options里的ACCELERATOR可以选择GPU
如果没绑定手机号会看不到这个选项
5.2 部署wandb
结果的输出涉及到了wandb,需要提前注册获取apiKey 点击Add-ons-> Secrets,输入wandb_key的键值对,然后点击Save->Done保存(我之前就忘了)
注册的时候Institutioon随便填一个就行,之后编辑账号信息可以删掉
输入以下代码,登录wandb:
import wandb
from kaggle_secrets import UserSecretsClient
user_secrets = UserSecretsClient()
wandb_api = user_secrets.get_secret("wandb_key")
wandb.login(key=wandb_api)
5.3调整参数
复制train.py到notebook,记得更改权重,配置的路径和一些自己的参数,我是这样的:
parser.add_argument('--weights', type=str, default='/kaggle/input/yolov7/yolov7.pt', help='initial weights path')
parser.add_argument('--cfg', type=str, default='/kaggle/input/yolov7/cfg/training/myTraining.yaml', help='model.yaml path')
parser.add_argument('--data', type=str, default='/kaggle/input/yolov7/data/myDataset.yaml', help='data.yaml path')
parser.add_argument('--hyp', type=str, default='/kaggle/input/yolov7/data/hyp.scratch.p5.yaml', help='hyperparameters path')
5.4输出结果
输入一下代码把/output文件进行打包
import os
import zipfile
import datetime
def file2zip(packagePath, zipPath):
zip = zipfile.ZipFile(zipPath, 'w', zipfile.ZIP_DEFLATED)
for path, dirNames, fileNames in os.walk(packagePath):
fpath = path.replace(packagePath, '')
for name in fileNames:
fullName = os.path.join(path, name)
name = fpath + '\\' + name
zip.write(fullName, name)
zip.close()
if __name__ == "__main__":
# 文件夹路径
packagePath = '/kaggle/working/'
zipPath = '/kaggle/working/output.zip'
if os.path.exists(zipPath):
os.remove(zipPath)
file2zip(packagePath, zipPath)
print("打包完成")
print(datetime.datetime.utcnow())
如果发现打包好的压缩包下载不了,输入以下代码
from IPython.display import FileLink
FileLink('output.zip')
然后就可以从下载链接下载了