537 lines (536 with data), 23.0 kB
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Calculate performance of the Faster R-CNN model based on IoU"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Set Working Directory"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'/Users/mingrenshen/PycharmProjects/MedImgAnalysis/stage2/FasterRCNN'"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# if get error \"ImportError: No module named utils\"\n",
"# change working directory\n",
"\n",
"# ONLY NEED TO RUN THIS CELL ONCE\n",
"\n",
"import os\n",
"os.chdir('./stage2/FasterRCNN')\n",
"os.getcwd()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Load Library"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%load_ext autoreload\n",
"%autoreload 2"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/mingrenshen/anaconda3/envs/chainercv/lib/python2.7/site-packages/chainer/_environment_check.py:37: UserWarning: Accelerate has been detected as a NumPy backend library.\n",
"vecLib, which is a part of Accelerate, is known not to work correctly with Chainer.\n",
"We recommend using other BLAS libraries such as OpenBLAS.\n",
"For details of the issue, please see\n",
"https://docs.chainer.org/en/stable/tips.html#mnist-example-does-not-converge-in-cpu-mode-on-mac-os-x.\n",
"\n",
"Please be aware that Mac OS X is not an officially supported OS.\n",
"\n",
" ''') # NOQA\n"
]
}
],
"source": [
"from utils import imageUtils\n",
"from utils import postProcessing\n",
"from utils import DetectionDataset\n",
"from utils import evaluation\n",
"from utils import visualization\n",
"import numpy as np\n",
"import os\n",
"from chainercv.links import FasterRCNNVGG16\n",
"from chainercv.visualizations import vis_bbox\n",
"from chainercv.utils import write_image\n",
"import chainer\n",
"import math\n",
"from chainercv import utils\n",
"%matplotlib inline\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Load Data"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"('total number of test images: ', 33)\n",
"('type of defects: ', 'Bleeding')\n"
]
}
],
"source": [
"#load Data\n",
"root = './DataSetPostiveAug'\n",
"#dataset = MultiDetectionDataset(data_dir=root, split='train')\n",
"dataset_test = DetectionDataset(data_dir=root, split='test')\n",
"bbox_label_names = ('Bleeding')\n",
"\n",
"# DataSet Statistics\n",
"#print('total number of training images: ', len(dataset))\n",
"print('total number of test images: ', len(dataset_test))\n",
"print('type of defects: ', bbox_label_names)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"18_13.jpg\n"
]
}
],
"source": [
"print(dataset_test.obtain_image_name(2))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Load Tranied Model"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"use_gpu = False\n",
"proposal_params = {'min_size': 8}\n",
"# old weights 'snapshot_model_100000_20181202.npz', \n",
"\n",
"model = FasterRCNNVGG16(n_fg_class=1, \n",
" pretrained_model= 'snapshot_model_200000.npz', \n",
" ratios=[ 0.5 , 0.57 , 0.67 , 0.8 , 1 , 1.5 , 2 , 2.5],anchor_scales=[8 , 16, 32, 64], min_size=1000, \n",
" max_size=1000,proposal_creator_params=proposal_params)\n",
"\n",
"if use_gpu:\n",
" chainer.cuda.get_device_from_id(0).use()\n",
" model.to_gpu()\n",
" \n",
"bbox_label_names = ('Bleeding')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### IoU Caculation"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Test image 0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/mingrenshen/anaconda3/envs/chainercv/lib/python2.7/site-packages/chainercv/utils/image/read_image.py:123: UserWarning: Although `chainer.config.cv_read_image_backend == \"cv2\"`, cv2 is not found. As a fallback option, read_image uses PIL. Either install cv2 or set `chainer.global_config.cv_read_image_backend = \"PIL\"` to suppress this warning.\n",
" 'Although `chainer.config.cv_read_image_backend == \"cv2\"`, '\n",
"/Users/mingrenshen/anaconda3/envs/chainercv/lib/python2.7/site-packages/chainercv/transforms/image/resize.py:69: UserWarning: Although `chainer.config.cv_resize_backend == \"cv2\"`, cv2 is not found. As a fallback option, resize uses PIL. Either install cv2 or set `chainer.global_config.cv_resize_backend = \"PIL\"` to suppress this warning.\n",
" 'Although `chainer.config.cv_resize_backend == \"cv2\"`, '\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[492.0, 114.0, 536.0, 160.0]]\n",
"[495.64935302734375, 113.03917694091797, 530.5108032226562, 156.4954376220703]\n",
"Test image 1\n",
"[[497.0, 96.0, 552.0, 158.0]]\n",
"[500.12933349609375, 116.84669494628906, 547.4039916992188, 160.2185821533203]\n",
"Test image 2\n",
"[[493.0, 64.0, 558.0, 162.0]]\n",
"[499.0670471191406, 102.83435821533203, 534.5481567382812, 155.79942321777344]\n",
"Test image 3\n",
"[[497.0, 56.0, 554.0, 162.0]]\n",
"[422.86688232421875, 514.7471923828125, 483.9058837890625, 606.9178466796875]\n",
"Test image 4\n",
"[[492.0, 57.0, 553.0, 157.0]]\n",
"[199.1635284423828, 290.2164001464844, 229.26795959472656, 311.7389221191406]\n",
"Test image 5\n",
"[[500.0, 56.0, 554.0, 153.0]]\n",
"[273.998291015625, 222.94361877441406, 313.0167236328125, 250.48780822753906]\n",
"Test image 6\n",
"[[494.0, 114.0, 532.0, 160.0]]\n",
"[490.039306640625, 119.68174743652344, 528.5392456054688, 153.6099090576172]\n",
"Test image 7\n",
"[[489.0, 118.0, 529.0, 157.0]]\n",
"[490.8721923828125, 115.87886810302734, 529.3150634765625, 160.35337829589844]\n",
"Test image 8\n",
"[[365.0, 302.0, 392.0, 324.0], [365.0, 336.0, 388.0, 358.0]]\n",
"[365.59466552734375, 304.7794189453125, 390.251220703125, 329.31744384765625]\n",
"Test image 9\n",
"[[369.0, 305.0, 390.0, 326.0], [368.0, 340.0, 385.0, 357.0]]\n",
"[296.5013732910156, 443.277587890625, 340.2290954589844, 479.644287109375]\n",
"Test image 10\n",
"[[365.0, 305.0, 393.0, 325.0], [365.0, 336.0, 386.0, 360.0]]\n",
"[367.260498046875, 299.6678466796875, 394.672119140625, 338.4056396484375]\n",
"Test image 11\n",
"[[368.0, 302.0, 389.0, 328.0], [366.0, 338.0, 384.0, 358.0]]\n",
"[366.9193420410156, 298.6146545410156, 400.4737854003906, 333.3150329589844]\n",
"Test image 12\n",
"[[364.0, 294.0, 400.0, 326.0], [364.0, 337.0, 386.0, 360.0]]\n",
"[365.6755065917969, 298.7417907714844, 399.2345275878906, 332.9513854980469]\n",
"Test image 13\n",
"[[364.0, 296.0, 396.0, 328.0], [362.0, 337.0, 388.0, 357.0]]\n",
"[361.32196044921875, 294.624267578125, 396.4757080078125, 330.46368408203125]\n",
"Test image 14\n",
"[[364.0, 297.0, 394.0, 328.0], [364.0, 337.0, 384.0, 357.0]]\n",
"[366.7547912597656, 300.3017883300781, 398.4836120605469, 330.0342712402344]\n",
"Test image 15\n",
"[[358.0, 294.0, 396.0, 328.0], [365.0, 337.0, 388.0, 361.0]]\n",
"[367.19744873046875, 299.2885437011719, 398.90155029296875, 331.2810974121094]\n",
"Test image 16\n",
"[[361.0, 293.0, 397.0, 325.0], [364.0, 341.0, 388.0, 361.0]]\n",
"[366.7566833496094, 298.02972412109375, 400.4236145019531, 332.8721923828125]\n",
"Test image 17\n",
"[[364.0, 337.0, 389.0, 360.0], [360.0, 294.0, 396.0, 329.0]]\n",
"[532.9326171875, 388.3398742675781, 576.0950927734375, 432.8794860839844]\n",
"Test image 18\n",
"[[361.0, 297.0, 398.0, 329.0], [362.0, 336.0, 389.0, 361.0]]\n",
"[365.9866638183594, 292.89947509765625, 402.0647888183594, 329.36871337890625]\n",
"Test image 19\n",
"[[366.0, 293.0, 397.0, 333.0], [362.0, 340.0, 389.0, 360.0]]\n",
"[363.2719421386719, 294.81732177734375, 399.3097229003906, 329.45977783203125]\n",
"Test image 20\n",
"[[360.0, 294.0, 400.0, 329.0], [361.0, 341.0, 390.0, 362.0]]\n",
"[362.51690673828125, 296.7083435058594, 397.5196533203125, 336.7876892089844]\n",
"Test image 21\n",
"[[360.0, 290.0, 400.0, 329.0], [357.0, 338.0, 388.0, 357.0]]\n",
"[362.5546875, 294.5987243652344, 403.5543212890625, 333.7799987792969]\n",
"Test image 22\n",
"[[350.0, 293.0, 397.0, 329.0], [350.0, 338.0, 388.0, 362.0]]\n",
"[362.78350830078125, 289.3074645996094, 406.210205078125, 334.1214904785156]\n",
"Test image 23\n",
"[[368.0, 305.0, 385.0, 328.0]]\n",
"[370.2763977050781, 312.51171875, 389.7111511230469, 332.82000732421875]\n",
"Test image 24\n",
"[[368.0, 305.0, 388.0, 326.0]]\n",
"[368.32342529296875, 305.36639404296875, 387.82861328125, 324.11053466796875]\n",
"Test image 25\n",
"[[369.0, 302.0, 386.0, 326.0], [366.0, 341.0, 390.0, 361.0]]\n",
"[299.90643310546875, 445.7901306152344, 342.37451171875, 477.3412780761719]\n",
"Test image 26\n",
"[[698.0, 344.0, 730.0, 368.0]]\n",
"[504.272705078125, 658.7452392578125, 540.181884765625, 698.17333984375]\n",
"Test image 27\n",
"[[696.0, 340.0, 730.0, 372.0]]\n",
"[696.69140625, 347.398681640625, 730.7735595703125, 374.4244384765625]\n",
"Test image 28\n",
"[[692.0, 338.0, 726.0, 370.0]]\n",
"[698.0301513671875, 347.8710632324219, 732.94384765625, 377.2978210449219]\n",
"Test image 29\n",
"[[692.0, 340.0, 738.0, 384.0]]\n",
"[694.415771484375, 341.35894775390625, 741.1317138671875, 378.94091796875]\n",
"Test image 30\n",
"[[694.0, 340.0, 740.0, 380.0]]\n",
"[702.3193359375, 344.4384765625, 744.983642578125, 381.5704345703125]\n",
"Test image 31\n",
"[[696.0, 340.0, 738.0, 382.0]]\n",
"[695.2821655273438, 344.5749816894531, 745.2443237304688, 384.3777160644531]\n",
"Test image 32\n",
"[[692.0, 340.0, 738.0, 380.0]]\n",
"[694.1968383789062, 342.7798767089844, 745.6187133789062, 383.6237487792969]\n",
"Done\n"
]
}
],
"source": [
"# import the iou function from utils.evaluation\n",
"\n",
"from utils.evaluation import bbox_iou\n",
"testIoUList = list()\n",
"resultTxt = open(\"faster.txt\",\"w\")\n",
"\n",
"for i in range(0,len(dataset_test)):\n",
" print(\"Test image %d\"%i)\n",
"\t# Prediction of second image\n",
" img, gt_bboxes, gt_labels = dataset_test[i]\n",
" model.score_thresh = 0.00001\n",
" pred_bboxes, pred_labels, pred_scores = model.predict([img])\n",
" predbboxes = pred_bboxes[0].tolist()\n",
" gtbboxes = gt_bboxes.tolist()\n",
" print(gtbboxes)\n",
" if len(predbboxes)==0 or len(predbboxes[0]) != 4:\n",
" print(\"#\"*10 + \"No Predictions\" + \"#\"*10)\n",
" resultTxt.write(\"\\n\")\n",
" else:\n",
" print(predbboxes[0])\n",
" tmp = bbox_iou(predbboxes[0],gtbboxes[0])\n",
" testIoUList.append(tmp)\n",
" fig = plt.figure(figsize=(15,6))\n",
" ax1 = fig.add_subplot(1, 2, 2)\n",
" ax2 = fig.add_subplot(1, 2, 1)\n",
" # plot prediction\n",
" bb = pred_bboxes[0][0]\n",
" resultTxt.write(dataset_test.obtain_image_name(i) + \",\")\n",
" resultTxt.write(str(bb[0]) + \",\" + str(bb[1]) + \",\" + str(bb[2]) + \",\" + str(bb[3]) + \",\" + str(pred_scores[0][0]) + \",\"+str(tmp)+\"\\n\")\n",
" visualization.vis_bbox(img, pred_bboxes[0], pred_labels[0], pred_scores[0], label_names=bbox_label_names, ax=ax1)\n",
" # plot ground truth\n",
" visualization.vis_bbox(img, gt_bboxes, gt_labels, label_names=bbox_label_names,ax=ax2)\n",
" fig.savefig(\"IoUtest\"+str(i)+\".png\")\n",
" #plt.cla()\n",
" plt.close('all')\n",
"print(\"Done\")\n",
"resultTxt.close()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.720027062818\n",
"0.553505929975\n",
"0.295017154535\n",
"0.0\n",
"0.0\n",
"0.0\n",
"0.62253832692\n",
"0.834099017127\n",
"0.653574506404\n",
"0.0\n",
"0.464999865179\n",
"0.468930401255\n",
"0.660341369249\n",
"0.812769491051\n",
"0.674551934261\n",
"0.559011227801\n",
"0.540405241952\n",
"0.0\n",
"0.694378329419\n",
"0.759208279839\n",
"0.675776081604\n",
"0.685832854647\n",
"0.51189694399\n",
"0.40894115362\n",
"0.870495185392\n",
"0.0\n",
"0.0\n",
"0.688797514552\n",
"0.413606472425\n",
"0.764805643584\n",
"0.642915353706\n",
"0.720774652775\n",
"0.705810826753\n"
]
}
],
"source": [
"#print(testIoUList)\n",
"for item in testIoUList:\n",
"\tprint(item)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"Tlist = [x for x in testIoUList if x > 0.0 ]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.7200270628176969, 0.5535059299748275, 0.2950171545347505, 0.6225383269199182, 0.834099017126839, 0.6535745064044033, 0.4649998651791994, 0.46893040125546476, 0.6603413692490404, 0.8127694910510229, 0.6745519342607965, 0.5590112278013447, 0.5404052419518487, 0.6943783294188128, 0.7592082798393095, 0.6757760816041404, 0.6858328546472706, 0.5118969439903058, 0.4089411536197577, 0.8704951853915542, 0.6887975145517793, 0.41360647242455467, 0.7648056435838599, 0.6429153537059025, 0.7207746527745814, 0.7058108267532085]\n"
]
}
],
"source": [
"print(Tlist)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"p = 1.0 * len(Tlist) / len(testIoUList)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.787878787879\n"
]
}
],
"source": [
"print(p)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"# plot historygrarme \n",
"import pandas as pd\n",
"df = pd.DataFrame({'IoU' : testIoUList})"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Figure size 1080x432 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import time\n",
"\n",
"histgramFileName = \"Hist_\" + time.strftime(\"%Y%m%d_%H%M%S\")\n",
"fig = plt.figure(figsize=(15,6))\n",
"fig, ax = plt.subplots(1,1)\n",
"df.hist(bins=50, ax=ax)\n",
"fig.savefig(histgramFileName)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.15"
}
},
"nbformat": 4,
"nbformat_minor": 2
}