PulseFocusPlatform/static/demo/mask_rcnn_demo.ipynb

414 lines
1.1 MiB
Plaintext
Raw Normal View History

2022-06-01 11:18:00 +08:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Change working directory to the project root"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"autoscroll": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/home/yang/PaddleDetection\n"
]
}
],
"source": [
"%cd .."
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Now let's take a look at the input image."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"autoscroll": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=640x480 at 0x7F2B7E54C550>"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from PIL import Image\n",
"\n",
"image_path = 'demo/000000570688.jpg'\n",
"img = Image.open(image_path)\n",
"img"
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"For inference, preprocess only involves decoding, normalization and transposing to CHW.\n",
"\n",
"**NOTE:** in most cases, one should use the configuration based [data feed](../docs/DATA.md) API which greatly simplifies the data pipeline."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"autoscroll": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"from ppdet.data.transform.operators import DecodeImage, NormalizeImage, Permute\n",
"\n",
"sample = {'im_file': image_path}\n",
"decode = DecodeImage(to_rgb=True)\n",
"normalize = NormalizeImage(\n",
" mean=[0.485, 0.456, 0.406],\n",
" std=[0.229, 0.224, 0.225],\n",
" is_scale=True,\n",
" is_channel_first=False)\n",
"permute = Permute(to_bgr=False, channel_first=True)\n",
"\n",
"sample = permute(normalize(decode(sample)))"
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Some extra effort is needed to massage data into the desired format. \n",
"\n",
"**NOTE:** Again, if the data feed API is used, these are handled automatically."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"autoscroll": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"h = sample['h']\n",
"w = sample['w']\n",
"im_info = np.array((h, w, 1), dtype=np.float32)\n",
"\n",
"sample['im_info'] = im_info\n",
"sample['im_shape'] = im_info\n",
"\n",
"# we don't need these\n",
"for key in ['im_file', 'h', 'w']:\n",
" del sample[key]\n",
"\n",
"# batch of a single sample\n",
"sample = {k: v[np.newaxis, ...] for k, v in sample.items()}\n",
"\n",
"feed_var_def = [\n",
" {'name': 'image', 'shape': (h, w, 3)},\n",
" {'name': 'im_info', 'shape': [3]},\n",
" {'name': 'im_shape', 'shape': [3]},\n",
"]"
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Next, build the [Mask R-CNN](https://arxiv.org/abs/1703.06870) model and associated fluid programs"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"autoscroll": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"from paddle import fluid\n",
"from ppdet.modeling import (MaskRCNN, ResNet, ResNetC5, RPNHead, RoIAlign,\n",
" BBoxHead, MaskHead, BBoxAssigner, MaskAssigner)\n",
"\n",
"roi_size = 14\n",
"\n",
"model = MaskRCNN(\n",
" ResNet(feature_maps=4),\n",
" RPNHead(),\n",
" BBoxHead(ResNetC5()),\n",
" BBoxAssigner(),\n",
" RoIAlign(resolution=roi_size),\n",
" MaskAssigner(),\n",
" MaskHead())\n",
"\n",
"startup_prog = fluid.Program()\n",
"infer_prog = fluid.Program()\n",
"with fluid.program_guard(infer_prog, startup_prog):\n",
" with fluid.unique_name.guard():\n",
" feed_vars = {\n",
" var['name']: fluid.data(\n",
" name=var['name'],\n",
" shape=var['shape'],\n",
" dtype='float32',\n",
" lod_level=0) for var in feed_var_def\n",
" }\n",
" test_fetches = model.test(feed_vars)\n",
"infer_prog = infer_prog.clone(for_test=True)\n",
"\n",
"# use GPU if available\n",
"if fluid.core.get_cuda_device_count() > 0:\n",
" place = fluid.CUDAPlace(0)\n",
"else:\n",
" place = fluid.CPUPlace()\n",
"\n",
"exe = fluid.Executor(place)\n",
"_ = exe.run(startup_prog)"
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Load the checkpoint weights, just wait a couple of minutes for it to be downloaded."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"autoscroll": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 140690/140690 [00:12<00:00, 10843.70KB/s]\n"
]
}
],
"source": [
"from ppdet.utils import checkpoint\n",
"\n",
"ckpt_url = 'https://paddlemodels.bj.bcebos.com/object_detection/mask_rcnn_r50_1x.tar'\n",
"checkpoint.load_checkpoint(exe, infer_prog, ckpt_url)"
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Run the program and fetch the result. "
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"autoscroll": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"output = exe.run(infer_prog, feed=sample,\n",
" fetch_list=[t.name for t in test_fetches.values()],\n",
" return_numpy=False)"
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Again, we need to massage the result a bit for visualization."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"autoscroll": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"res = {\n",
" k: (np.array(v), v.recursive_sequence_lengths())\n",
" for k, v in zip(test_fetches.keys(), output)\n",
"}\n",
"# fake image id\n",
"res['im_id'] = [[[0] for _ in range(res['bbox'][1][0][0])]]\n",
"res['im_shape'] = [[im_info]]"
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Now overlay the bboxes and masks onto the image...\n",
"\n",
"And voila, we've successully built and run the Mask R-CNN inference pipeline."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"autoscroll": false,
"ein.hycell": false,
"ein.tags": "worksheet-0",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<PIL.Image.Image image mode=RGB size=640x480 at 0x7F2B2046D190>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from ppdet.utils.coco_eval import bbox2out, mask2out, coco17_category_info\n",
"from ppdet.utils.visualizer import visualize_results\n",
"\n",
"cls2cat, cat2name = coco17_category_info()\n",
"bboxes = bbox2out([res], cls2cat)\n",
"masks = mask2out([res], cls2cat, roi_size)\n",
"\n",
"visualize_results(img, 0, cat2name, 0.5, bboxes, masks)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.16"
},
"name": "mask_rcnn_demo.ipynb"
},
"nbformat": 4,
"nbformat_minor": 2
}