mmdet 安装与使用 1 2 !pip install openmim !mim install mmdet
上述指令即可完成对mmdet的安装,而在kaggle上大概要花20min左右,主要是造轮子的时间太久了。
这边有一个取巧的办法,可以直接copy&edit这个工程 可以很快的完成mmdet的安装。
mmdet + tensorboard 在kaggle上我们无法直接访问tensorboard,这里可以用ngrok做转发,代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import datetimeimport tensorflow as tffrom tensorflow import summary%load_ext tensorboard log_dir="runs/" !wget https://bin .equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip !unzip ngrok-stable-linux-amd64.zip !./ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx import osimport multiprocessingpool = multiprocessing.Pool(processes = 10 ) results_of_processes = [pool.apply_async(os.system, args=(cmd, ), callback = None ) for cmd in [ f"tensorboard --logdir ./runs/ --host 0.0.0.0 --port 6006 &" , "./ngrok http 6006 &" ]] ! curl -s http://localhost:4040 /api/tunnels | python3 -c \ "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
其中authtoken需要注册ngrok可以获得,ngrok的链接:ngrok
config文件与训练 1 %%writefile configs/myconfig/xxxxxxxxx.py
使用上述指令可以自行创建一个config文件,方便训练与修改。
1 !python tools/train.py configs/myconfig/xxxxxxxxx.py
验证 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 from mmcv import Configcfg = Config.fromfile('configs/myconfig/yolox_l_4x4_80e_coco.py' ) def xyxy2xywh (bbox ): """Convert ``xyxy`` style bounding boxes to ``xywh`` style for COCO evaluation. Args: bbox (numpy.ndarray): The bounding boxes, shape (4, ), in ``xyxy`` order. Returns: list[float]: The converted bounding boxes, in ``xywh`` order. """ _bbox = bbox.tolist() return [ _bbox[0 ], _bbox[1 ], _bbox[2 ] - _bbox[0 ], _bbox[3 ] - _bbox[1 ], ] from mmdet.apis import inference_detector, init_detector, show_result_pyplotimport numpy as np from pycocotools.coco import COCOimport jsonfrom tqdm import tqdmimport mmcvmodel = init_detector(cfg, '/kaggle/working/runs/epoch_80.pth' ) test_json_path = '/kaggle/working/mmdetection/data_anno/instances_val2017.json' coco = COCO(test_json_path) imgIds = coco.getImgIds() res = [] with tqdm(total=len (imgIds)) as pbar: for i in imgIds: img_info = coco.loadImgs(i) img = mmcv.imread('/kaggle/input/fewshotlogodetection/val/images/' + img_info[0 ]['file_name' ]) result = inference_detector(model, img) bboxes = np.vstack(result) labels = [ np.full(bbox.shape[0 ], j, dtype=np.int32) for j, bbox in enumerate (result) ] labels = np.concatenate(labels) for k in range (len (labels)): res_tmp = {} box = xyxy2xywh(bboxes[k,:4 ]) res_tmp['image_id' ] = int (i) res_tmp['category_id' ] = int (labels[k] + 1 ) res_tmp['bbox' ] = box res_tmp['score' ] = float (bboxes[k,4 ]) res.append(res_tmp) pbar.update(1 )
当然也可以直接使用现成的。
1 !python tools/test.py configs/myconfig/yolox_l_4x4_80e_coco.py /kaggle/input/modelpara/yolox_l_0.58.pth --format-only --options "jsonfile_prefix=/kaggle/working/res"
参考 https://blog.csdn.net/weixin_45564209/article/details/119881300
https://www.kaggle.com/code/alvin369/predicting-math-functions/notebook