在Kaggle上运行自己的模型(yolov7)

前言

很多人要跑深度学习,但是电脑配置不够,我的3080也要一天,所以想白嫖资源。先用了谷歌的colab,但是数据量太大了,没跑多少epoch就资源限制了。所以转到用Kaggle了。以下内容是我在Kaggle上部署自己的模型(我用的是yolov7)上的工作和遇到的坑,希望可以帮助到大家。

先在本地确定自己的模型能够运行!!!然后复制一份进行Kaggle部署

操作流程

1.首先注册Kaggle

注册后想要使用GPU需要绑定手机号,流程如下:

点击右上角头像->settings->Phone verification,输入手机号,进行人机验证,获取验证码并绑定。

可能出现不显示google验证,用梯子就好,不行再刷新试试 还不行可以参考这个帖子Kaggle注册方法,解决人机验证问题,我没试过

2.提前想好模型数据集在Kaggle里dataset中的名字(要6字符及以上)

这是我的模型和数据集名称和文件目录结构,仅供参考

我的数据集叫dataset,模型叫yolov7

image-20240326213742790

Kaggle的模型可以上传到Dataset里进行运行,1000个文件以上需要打包成zip文件

3.上传数据集

3.1更改yaml里的路径

因为我用的是自己的数据,所以要更改dataset.yaml文件,路径格式为/kaggle/input/自己的数据集名称,我这里是dataset

image-20240326213936917

3.2更改train、val和test的内容

以train.txt为例:

image-20240326214359067

路径为/kaggle/input/自己的数据集名称加上自己的文件目录结构:

image-20240326214518949

3.3上传数据集

新建数据集:Creat-> New Dataset,把自己的数据集打包成zip上传

image-20240326214712203

image-20240326215005464

数据集名称就是第二步提前想好的名称(我这里是dataset)

上传之后要等待解压

4.上传模型

4.1更改导入路径

更改所有涉及到自己工具包的py文件导入路径,以yolo.py为例:

image-20240326215502282

所有自己包的路径更改成模型名称.自己的包名(我这里是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,其他的欢迎在评论区补充

image-20240326220500689

# 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随便填一个就行,之后编辑账号信息可以删掉

image-20240326221954211

输入以下代码,登录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')

然后就可以从下载链接下载了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值