怎么看mmdetection版本_kaggle notebook运行mmdetection并提交结果采坑记
lz最近参加kaggle一个比赛,比赛强制使用kaggle notebook来运行inference的代码并生成结果,并且整个notebook的kernel是全程不能联网的。为此lz折腾了一整天,终于摸出了一条路径,并记录下来。
那么,现在开始。
首先,在notebook选项卡页面点击New Notebook
在配置页面选择notebook以及GPU
create了之后,就来到了notebook界面
整个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按钮
在新页面选择Upload
在上传界面上传之前准备好的离线包和代码zip和权重文件,并上传
上传完之后点Create,生成自己的“数据集”
再点击notebook界面的Add data,点击Your dataset选项卡,点击Add
这样,你的文件就出现在了右上角的input目录里面了
接下来就是安装各种环境了,在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
以上全部执行成功后,点击右上角的
这时候注意选择Save&run All
点击save之后等待好一会,notebook会从头到尾执行所有的cell,并保存所有cell的输入和输出,以及生成的文件。等待左下角的提示消失之后,就可以离开这个页面了。
现在回到最开始的notebook选项卡页面,点击自己的kernel
点击右栏output
找到自己生成的csv,点击submit按钮就可以啦