当前位置: 首页 > news >正文

怎么看mmdetection版本_kaggle notebook运行mmdetection并提交结果采坑记

lz最近参加kaggle一个比赛,比赛强制使用kaggle notebook来运行inference的代码并生成结果,并且整个notebook的kernel是全程不能联网的。为此lz折腾了一整天,终于摸出了一条路径,并记录下来。

e2dbcfe8ccaea350fc80a84919eabc31.png
胜负乃兵家常事,大侠请重新来过

那么,现在开始。

首先,在notebook选项卡页面点击New Notebook

9fb4f990b3c4eaaff2ec9a28b5541023.png

在配置页面选择notebook以及GPU

bc0a4b8f398f4b723726e24d568c78be.png

create了之后,就来到了notebook界面

a4222016f7689b3724e71327cc5b5368.png
注意,根据你的比赛是否要求全程断网,记得检查这里网络的按钮

整个mmdetection环境的搭建难点在于kernel是没有网络的,所以以下几个库是要准备离线安装包的:

  • PyYAML-5.3.1
  • pycocotools-2.0.0
  • addict-2.2.1
  • mmcv-0.5.9 (我用的mmdet是2.0.0,需要mmcv>=0.5.7)
  • terminal-0.4.0
  • terminaltables-3.1.0

另外,还需要从mmdetection的代码,压缩成zip;以及你训练好的权重。

准备好这几个文件之后,点击右上角的Add data按钮

7f30fff9393b1e6af957f55c930ee75a.png

在新页面选择Upload

ab985f0f2395040e8ca388a970118904.png

在上传界面上传之前准备好的离线包和代码zip和权重文件,并上传

01e0074e388c01a199726450e89d8125.png

上传完之后点Create,生成自己的“数据集”

再点击notebook界面的Add data,点击Your dataset选项卡,点击Add

7b76f8f429391b33437d174da53c057d.png

这样,你的文件就出现在了右上角的input目录里面了

e93835c36caf8c13f0afe3793479f4a0.png

接下来就是安装各种环境了,在notebook的cell里面先执行

!cp -r /kaggle/input/xxx /kaggle/working

xxx是你的文件目录的名字,因为input是read-only的,所以需要先挪到/kaggle/working

最前面加! 是因为这需要解释成shell命令运行,否则解释成python语句

接下来是离线安装各种包(忍不住看了一眼大腿上的蚊子包。。)

!pip install /kaggle/working/xxx/addict-2.2.1-py3-none-any.whl
!pip install /kaggle/working/xxx/yapf-0.30.0-py2.py3-none-any.whl
!pip install /kaggle/working/xxx/terminal-0.4.0-py3-none-any.whl
!pip install /kaggle/working/xxx/terminaltables-3.1.0-py3-none-any.whl
!pip install /kaggle/working/xxx/mmcv-0.5.9-cp37-cp37m-linux_x86_64.whl
!pip install /kaggle/working/xxx/pycocotools-2.0.0/pycocotools-2.0.0

然后是编译mmdetection(等待n分钟)

!pip install -v -e /kaggle/working/mmdetection

因为只有inference,所以可以不用python setup.py develop

接下来一段是生成test数据的annot.json,mmdet才会读取test dataset

import os
import csv
import cv2
import json
import shutil
from tqdm import tqdm
import numpy as np

train_img_dir = '/kaggle/input/global-wheat-detection/test'
annot_dst_path = '/kaggle/working/annot_coco_test.json'
js = {'images': [], 'annotations': [], 'categories': [], }

img_name2id = {}
img_id = 0
annot_id = 0
img_names = os.listdir(train_img_dir)
for img_name in tqdm(img_names):
    img_path = os.path.join(train_img_dir, img_name)
    img = cv2.imread(img_path)
    height = img.shape[0]
    width = img.shape[1]
    img_name2id[img_name] = img_id
    js['images'].append({'file_name': img_name, 'height': height, 'width': width, 'id': img_id})
    js['annotations'].append(
        {'segmentation': [], 'area': 1, 'iscrowd': 0, 'image_id': img_id, 'bbox': [1, 1, 1, 1],
         'category_id': 0, 'id': annot_id})
    img_id += 1
    annot_id += 1

js['categories'].append({'id': 0, 'name': 'wheat'})
with open(annot_dst_path, 'w') as f:
    json.dump(js, f)

接下来是运行test.py文件,生成csv结果啦,到这里就快大功告成了

!python -u /kaggle/working/mmdetection/test_wheat.py /kaggle/working/mmdetection/kaggle_cascade_r50.py /kaggle/working/xxx/epoch_9.pth --csv_out_path /kaggle/working/submission.csv

以上全部执行成功后,点击右上角的

e1a81fe98c53b6f79902e58489d247db.png

这时候注意选择Save&run All

80d947f93c36ddcbcab128c87d60fce3.png

点击save之后等待好一会,notebook会从头到尾执行所有的cell,并保存所有cell的输入和输出,以及生成的文件。等待左下角的提示消失之后,就可以离开这个页面了。

现在回到最开始的notebook选项卡页面,点击自己的kernel

6ba61dbc2b175659f931cd9566c68e9e.png

点击右栏output

7f3c3ee2fc32dd982bf5a70582f7afa0.png

找到自己生成的csv,点击submit按钮就可以啦

相关文章:

  • matlab hsi图像分割_图像分割之阈值分割(matlab)
  • imx6 配置串口波特率_STM32F103 串口的使用方法
  • 十天征服单片机百度云_单片机学习「1」 初始51单片机
  • jpa删除数据后数据库无修改_Java编程第46讲——强大、奇妙的数据库操作工具JPA...
  • 有赞小程序源码_有赞小程序商城怎么开通,如何收费?
  • docker pycharm 连接_七、连Pycharm都不知道怎么用,学什么Python
  • github图片_通过这个 Go 项目搭建一个图片服务器竟然这么简单
  • pecs_神奇的PECS是什么?看看BCaBA教师们怎么说
  • 仿生蛇类机器人 特点_仿生科技成为机器人技术发展最快的领域之一
  • ue4 曲线图实现 蓝图_UE4[蓝图]只需一秒!最速实现【二段跳】
  • 临键锁如何实现幻读_阿里面试:如何用Redis实现分布式锁?
  • 相机裁剪旋转_测试版的Windows 10相机应用程序开始支持文档扫描
  • eve战巡族伤害_新版本各族3级战巡资料【纯手打】
  • 索尼的hlg是什么_hlg(索尼hlg和slog的区别)
  • 卷积过滤器的宽度_02卷积层与池化层中的核与过滤器
  • JavaScript 如何正确处理 Unicode 编码问题!
  • [iOS]Core Data浅析一 -- 启用Core Data
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • java8 Stream Pipelines 浅析
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Markdown 语法简单说明
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • mysql外键的使用
  • React16时代,该用什么姿势写 React ?
  • 反思总结然后整装待发
  • 基于web的全景—— Pannellum小试
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 算法-插入排序
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 主流的CSS水平和垂直居中技术大全
  • 最简单的无缝轮播
  • k8s使用glusterfs实现动态持久化存储
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # 达梦数据库知识点
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #WEB前端(HTML属性)
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • $.proxy和$.extend
  • (39)STM32——FLASH闪存
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (C#)一个最简单的链表类
  • (C语言)fgets与fputs函数详解
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (二)windows配置JDK环境
  • (二十三)Flask之高频面试点
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (篇九)MySQL常用内置函数
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。