Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import json\n",
"import math\n",
"%matplotlib inline\n",
"__author__ = 'haojian'\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"SILENT = 1\n",
"NONSILENT = 0\n",
"\n",
"class ep_abs_shot(object):\n",
" def __init__(self, s_f, e_f, fps):\n",
" self.s_f = s_f #start frame\n",
" self.e_f = e_f #end frame\n",
" self.fps = fps #frame per second\n",
" \n",
" def to_JSON(self):\n",
" return json.dumps(self, default=lambda o: o.__dict__, \n",
" sort_keys=True, indent=4)\n",
"\n",
" def __repr__(self):\n",
" return \"(s_f: \" + str(self.s_f) + \" e_f: \" + str(self.e_f) + \" fps: \" + str(self.fps) + \")\"\n",
"\n",
"class vis_abs_shot(ep_abs_shot):\n",
" def setRawScore(self, rawscore):\n",
" self.rawscore = rawscore\n",
" \n",
"class audio_abs_shot(ep_abs_shot):\n",
" def sefIfSilent(self, ifsilent):\n",
" self.ifsilent = ifsilent"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# for mm:ss format\n",
"def getSec(s):\n",
" l = s.split(':')\n",
" return int(l[0]) * 60 + int(l[1])\n",
"\n",
"# data io\n",
"\n",
"# the annotation is per frame.\n",
"dict_anno = {}\n",
"dict_info = {}\n",
"dict_framerate = {}\n",
"\n",
"# load video info\n",
"with open(\"../tvsum/data/ydata-tvsum50-info.tsv\") as finfo:\n",
" for line in finfo:\n",
" if line.startswith('cate'):\n",
" continue\n",
" fields = line.split('\\t')\n",
" # print fields[1], fields[4], getSec(fields[4])\n",
" dict_info[fields[1]] = getSec(fields[4])\n",
" \n",
"# load shot scores\n",
"with open(\"../tvsum/data/ydata-tvsum50-anno.tsv\") as fanno:\n",
" for line in fanno:\n",
" fields = line.split('\\t')\n",
" if fields[0] in dict_anno:\n",
" # print fields[2]\n",
" # dict_anno[fields[0]] += 1\n",
" arr = np.fromstring(fields[2], dtype=int, sep=\",\")\n",
" # print arr[:10]\n",
" dict_anno[fields[0]] = np.vstack((arr, dict_anno[fields[0]]))\n",
" else:\n",
"# print fields[0], len(fields[2].split(',')), dict_info[fields[0]], \"framerate\", float(len(fields[2].split(',')))/dict_info[fields[0]], \"round\", round(float(len(fields[2].split(',')))/dict_info[fields[0]])\n",
" dict_framerate[fields[0]] = round(float(len(fields[2].split(',')))/dict_info[fields[0]])\n",
" arr = np.fromstring(fields[2], dtype=int, sep=\",\")\n",
" dict_anno[fields[0]] = arr"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"30.0\n",
"4468\n",
"149\n"
]
}
],
"source": [
"# verify fps.\n",
"print dict_framerate[\"sTEELN-vY30\"]\n",
"print len(dict_anno[\"sTEELN-vY30\"][0])\n",
"print dict_info[\"sTEELN-vY30\"]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#load audio shots from audio_info.json\n",
"audioshots_dict = {}\n",
"\n",
"with open(\"../audio_info.json\") as json_file:\n",
" json_data = json.load(json_file)\n",
" \n",
"for vid, anno in dict_anno.items():\n",
" audioshots_dict[vid] = {}\n",
" audioshots_dict[vid][\"silent\"] = []\n",
" audioshots_dict[vid][\"nonsil\"] = []\n",
" \n",
" video_data = {float(k):v for k,v in json_data[vid].items()}\n",
" fps = dict_framerate[vid]\n",
" for stime, raw_audio in sorted(video_data.items()):\n",
" s_f = int(stime*fps)\n",
" e_f = int(float(raw_audio['end'])*fps)-1\n",
" if raw_audio['ifsilent'] == 'silent' and (e_f - s_f) > 15:\n",
" audioshots_dict[vid][\"silent\"].append([s_f, e_f])\n",
" else:\n",
" audioshots_dict[vid][\"nonsil\"].append([s_f, e_f])\n",
"# print audioshots_dict[vid]\n",
"# break"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2, 5]\n",
"[[2, 3], [5, 6]]\n",
"[]\n",
"0\n",
"4\n"
]
}
],
"source": [
"def getOverlap(a, b):\n",
" if a[0] > a[1] or b[0] > b[1]:\n",
" print \"error input\"\n",
" return\n",
" upper = min(a[1], b[1])\n",
" lower = max(a[0], b[0])\n",
" if upper >= lower:\n",
" return [lower, upper]\n",
"\n",
"def getOverlaps(slot, intervals):\n",
" res = []\n",
" for interval in intervals:\n",
" tmp = getOverlap(slot, interval)\n",
" if tmp is not None:\n",
" res.append(tmp)\n",
" return res\n",
"\n",
"def countDuration(intervals):\n",
" res = 0\n",
" for interval in intervals:\n",
" if interval[1] < interval[0]:\n",
" print \"illegal input\"\n",
" return -1\n",
" res += interval[1] - interval[0] + 1\n",
" return res\n",
"\n",
"print getOverlap([1, 5], [2,8])\n",
"print getOverlaps([1,6], [[2,3], [5,7]])\n",
"print getOverlaps([10,11], [[2,3], [5,7]])\n",
"print countDuration(getOverlaps([10,11], [[2,3], [5,7]]))\n",
"print countDuration(getOverlaps([1,6], [[2,3], [5,7]]))"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#load shots detection from directory\n",
"\n",
"shots_dict = {}\n",
"for vid, anno in dict_anno.items():\n",
" score_filepath = \"../tvsum50_shot_scores/\" + vid + \"_scores.txt\"\n",
" shot_filepath = \"../tvsum50_shot_scores/\" + vid + \"_shots.txt\"\n",
"\n",
"# print vid, score_filepath\n",
" shots_dict[vid] = []\n",
" with open(shot_filepath) as f_shot:\n",
" for line in f_shot:\n",
" vals = line.split(\"\\t\")\n",
" s_f = int(vals[0]) #start frame\n",
" s_e = int(vals[1]) #end frame\n",
" shots_dict[vid].append([s_f, s_e, 0])\n",
" with open(score_filepath) as f_score:\n",
" shot_idx = 0\n",
" frame_idx = 0\n",
" for line in f_score:\n",
" if shots_dict[vid][shot_idx][0] <= frame_idx <= shots_dict[vid][shot_idx][1]:\n",
" shots_dict[vid][shot_idx][2] += float(line)\n",
" else:\n",
" shot_idx += 1\n",
" if shots_dict[vid][shot_idx][0] <= frame_idx <= shots_dict[vid][shot_idx][1]:\n",
" shots_dict[vid][shot_idx][2] += float(line)\n",
" else:\n",
" print \"error\"\n",
" frame_idx = frame_idx + 1"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"raw_video_shot = {}\n",
"# print shots_dict[vid]\n",
"for vid, anno in dict_anno.items():\n",
" raw_video_shot[vid] = []\n",
"# print vid, len(shots_dict[vid])\n",
" for item in shots_dict[vid]:\n",
" cur_shot = {}\n",
" cur_shot['s_f'] = item[0]\n",
" cur_shot['e_f'] = item[1]\n",
" cur_shot['fps'] = dict_framerate[vid]\n",
" cur_shot['rawscore'] = item[2]\n",
" cur_shot['silent'] = getOverlaps([item[0], item[1]], audioshots_dict[vid][\"silent\"])\n",
" cur_shot['nonsil'] = getOverlaps([item[0], item[1]], audioshots_dict[vid][\"nonsil\"])\n",
" cur_shot['dur_sil'] = countDuration(cur_shot['silent'])\n",
" cur_shot['dur_nonsil'] = countDuration(cur_shot['nonsil'])\n",
" raw_video_shot[vid].append(cur_shot)\n",
"# cur_shot = vis_abs_shot(item[0], item[1], dict_framerate[\"sTEELN-vY30\"])\n",
"# cur_shot.setRawScore(item[2])\n",
"# raw_video_shot[vid].append(cur_shot)\n",
"\n",
"# print raw_video_shot[\"sTEELN-vY30\"][0].to_JSON()\n",
"with open('raw_video_shot.json', 'w') as outfile:\n",
" json.dump(raw_video_shot, outfile)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[{'nonsil': [[51, 89]], 'silent': [[0, 50]], 'dur_sil': 51, 'dur_nonsil': 39, 'rawscore': 59.58698600000002, 'e_f': 89, 'fps': 30.0, 's_f': 0}, {'nonsil': [[90, 197]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 108, 'rawscore': 71.67148499999996, 'e_f': 197, 'fps': 30.0, 's_f': 90}, {'nonsil': [[198, 294]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 97, 'rawscore': 55.403223000000004, 'e_f': 294, 'fps': 30.0, 's_f': 198}, {'nonsil': [[295, 364]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 70, 'rawscore': 61.553014999999995, 'e_f': 364, 'fps': 30.0, 's_f': 295}, {'nonsil': [[365, 475]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 111, 'rawscore': 96.71306900000002, 'e_f': 475, 'fps': 30.0, 's_f': 365}, {'nonsil': [[476, 503], [504, 510], [511, 584]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 109, 'rawscore': 88.140261, 'e_f': 584, 'fps': 30.0, 's_f': 476}, {'nonsil': [[585, 608], [609, 615], [616, 659], [660, 672], [673, 688]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 104, 'rawscore': 89.02937000000001, 'e_f': 688, 'fps': 30.0, 's_f': 585}, {'nonsil': [[689, 743]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 55, 'rawscore': 46.26362199999998, 'e_f': 743, 'fps': 30.0, 's_f': 689}, {'nonsil': [[744, 806]], 'silent': [[807, 822]], 'dur_sil': 16, 'dur_nonsil': 63, 'rawscore': 64.84951099999999, 'e_f': 822, 'fps': 30.0, 's_f': 744}, {'nonsil': [[834, 875]], 'silent': [[823, 833]], 'dur_sil': 11, 'dur_nonsil': 42, 'rawscore': 41.08462, 'e_f': 875, 'fps': 30.0, 's_f': 823}, {'nonsil': [[876, 966]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 91, 'rawscore': 73.62669799999999, 'e_f': 966, 'fps': 30.0, 's_f': 876}, {'nonsil': [[967, 1001]], 'silent': [[1002, 1076]], 'dur_sil': 75, 'dur_nonsil': 35, 'rawscore': 92.11728899999999, 'e_f': 1076, 'fps': 30.0, 's_f': 967}, {'nonsil': [], 'silent': [[1077, 1146]], 'dur_sil': 70, 'dur_nonsil': 0, 'rawscore': 57.89729200000002, 'e_f': 1146, 'fps': 30.0, 's_f': 1077}, {'nonsil': [], 'silent': [[1147, 1190]], 'dur_sil': 44, 'dur_nonsil': 0, 'rawscore': 15.018991, 'e_f': 1190, 'fps': 30.0, 's_f': 1147}, {'nonsil': [], 'silent': [[1191, 1270]], 'dur_sil': 80, 'dur_nonsil': 0, 'rawscore': 30.30821000000001, 'e_f': 1270, 'fps': 30.0, 's_f': 1191}, {'nonsil': [], 'silent': [[1271, 1329]], 'dur_sil': 59, 'dur_nonsil': 0, 'rawscore': 31.243484999999996, 'e_f': 1329, 'fps': 30.0, 's_f': 1271}, {'nonsil': [[1356, 1369]], 'silent': [[1330, 1355]], 'dur_sil': 26, 'dur_nonsil': 14, 'rawscore': 20.341893, 'e_f': 1369, 'fps': 30.0, 's_f': 1330}, {'nonsil': [[1370, 1420]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 51, 'rawscore': 28.937489000000006, 'e_f': 1420, 'fps': 30.0, 's_f': 1370}, {'nonsil': [[1421, 1456]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 36, 'rawscore': 20.330119000000003, 'e_f': 1456, 'fps': 30.0, 's_f': 1421}, {'nonsil': [[1457, 1537]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 81, 'rawscore': 41.249621, 'e_f': 1537, 'fps': 30.0, 's_f': 1457}, {'nonsil': [[1538, 1583]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 46, 'rawscore': 22.051315000000002, 'e_f': 1583, 'fps': 30.0, 's_f': 1538}, {'nonsil': [[1584, 1659]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 76, 'rawscore': 41.086037, 'e_f': 1659, 'fps': 30.0, 's_f': 1584}, {'nonsil': [[1660, 1750]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 91, 'rawscore': 52.575950999999996, 'e_f': 1750, 'fps': 30.0, 's_f': 1660}, {'nonsil': [[1751, 1831]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 81, 'rawscore': 45.00329200000001, 'e_f': 1831, 'fps': 30.0, 's_f': 1751}, {'nonsil': [[1832, 1919]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 88, 'rawscore': 47.265296, 'e_f': 1919, 'fps': 30.0, 's_f': 1832}, {'nonsil': [[1920, 1955], [1956, 1959], [1960, 1962]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 43, 'rawscore': 23.057809000000006, 'e_f': 1962, 'fps': 30.0, 's_f': 1920}, {'nonsil': [[1963, 1970], [1971, 1981], [1982, 1996]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 34, 'rawscore': 17.369649, 'e_f': 1996, 'fps': 30.0, 's_f': 1963}, {'nonsil': [[1997, 2022], [2049, 2090], [2091, 2102]], 'silent': [[2023, 2048]], 'dur_sil': 26, 'dur_nonsil': 80, 'rawscore': 54.60798899999999, 'e_f': 2102, 'fps': 30.0, 's_f': 1997}, {'nonsil': [[2103, 2106], [2107, 2148]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 46, 'rawscore': 22.892795999999986, 'e_f': 2148, 'fps': 30.0, 's_f': 2103}, {'nonsil': [[2149, 2169], [2170, 2178], [2179, 2261]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 113, 'rawscore': 59.70463200000002, 'e_f': 2261, 'fps': 30.0, 's_f': 2149}, {'nonsil': [[2262, 2373]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 112, 'rawscore': 59.62941000000003, 'e_f': 2373, 'fps': 30.0, 's_f': 2262}, {'nonsil': [[2374, 2426]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 53, 'rawscore': 28.508327, 'e_f': 2426, 'fps': 30.0, 's_f': 2374}, {'nonsil': [[2427, 2489], [2490, 2499], [2500, 2519]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 93, 'rawscore': 49.53069499999995, 'e_f': 2519, 'fps': 30.0, 's_f': 2427}, {'nonsil': [[2520, 2606]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 87, 'rawscore': 39.890198999999996, 'e_f': 2606, 'fps': 30.0, 's_f': 2520}, {'nonsil': [[2607, 2647]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 41, 'rawscore': 20.306771, 'e_f': 2647, 'fps': 30.0, 's_f': 2607}, {'nonsil': [[2648, 2691]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 44, 'rawscore': 20.470692, 'e_f': 2691, 'fps': 30.0, 's_f': 2648}, {'nonsil': [[2692, 2731]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 40, 'rawscore': 18.662051999999996, 'e_f': 2731, 'fps': 30.0, 's_f': 2692}, {'nonsil': [[2732, 2792]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 61, 'rawscore': 27.224929999999993, 'e_f': 2792, 'fps': 30.0, 's_f': 2732}, {'nonsil': [[2793, 2878]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 86, 'rawscore': 42.561871000000025, 'e_f': 2878, 'fps': 30.0, 's_f': 2793}, {'nonsil': [[2879, 2911]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 33, 'rawscore': 16.733923, 'e_f': 2911, 'fps': 30.0, 's_f': 2879}, {'nonsil': [[2912, 3000]], 'silent': [[3001, 3005]], 'dur_sil': 5, 'dur_nonsil': 89, 'rawscore': 50.33506699999999, 'e_f': 3005, 'fps': 30.0, 's_f': 2912}, {'nonsil': [[3031, 3071], [3094, 3095]], 'silent': [[3006, 3030], [3072, 3093]], 'dur_sil': 47, 'dur_nonsil': 43, 'rawscore': 43.922906999999995, 'e_f': 3095, 'fps': 30.0, 's_f': 3006}, {'nonsil': [[3096, 3117], [3118, 3125], [3126, 3134], [3162, 3197]], 'silent': [[3135, 3161], [3198, 3199]], 'dur_sil': 29, 'dur_nonsil': 75, 'rawscore': 51.22956799999999, 'e_f': 3199, 'fps': 30.0, 's_f': 3096}, {'nonsil': [[3229, 3243]], 'silent': [[3200, 3228]], 'dur_sil': 29, 'dur_nonsil': 15, 'rawscore': 22.081005999999988, 'e_f': 3243, 'fps': 30.0, 's_f': 3200}, {'nonsil': [[3244, 3293]], 'silent': [[3294, 3326]], 'dur_sil': 33, 'dur_nonsil': 50, 'rawscore': 39.152719, 'e_f': 3326, 'fps': 30.0, 's_f': 3244}, {'nonsil': [], 'silent': [[3327, 3432]], 'dur_sil': 106, 'dur_nonsil': 0, 'rawscore': 46.67328200000001, 'e_f': 3432, 'fps': 30.0, 's_f': 3327}, {'nonsil': [], 'silent': [[3433, 3540]], 'dur_sil': 108, 'dur_nonsil': 0, 'rawscore': 61.161991999999984, 'e_f': 3540, 'fps': 30.0, 's_f': 3433}, {'nonsil': [], 'silent': [[3541, 3578]], 'dur_sil': 38, 'dur_nonsil': 0, 'rawscore': 7.419937999999999, 'e_f': 3578, 'fps': 30.0, 's_f': 3541}, {'nonsil': [[3619, 3656]], 'silent': [[3579, 3618]], 'dur_sil': 40, 'dur_nonsil': 38, 'rawscore': 11.730293999999999, 'e_f': 3656, 'fps': 30.0, 's_f': 3579}, {'nonsil': [[3657, 3726]], 'silent': [[3727, 3733]], 'dur_sil': 7, 'dur_nonsil': 70, 'rawscore': 21.137302, 'e_f': 3733, 'fps': 30.0, 's_f': 3657}, {'nonsil': [[3751, 3779]], 'silent': [[3734, 3750]], 'dur_sil': 17, 'dur_nonsil': 29, 'rawscore': 11.297207, 'e_f': 3779, 'fps': 30.0, 's_f': 3734}, {'nonsil': [[3780, 3898]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 119, 'rawscore': 39.999168999999995, 'e_f': 3898, 'fps': 30.0, 's_f': 3780}, {'nonsil': [[3899, 3941]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 43, 'rawscore': 10.478315, 'e_f': 3941, 'fps': 30.0, 's_f': 3899}, {'nonsil': [[3942, 3991]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 50, 'rawscore': 7.233194000000002, 'e_f': 3991, 'fps': 30.0, 's_f': 3942}, {'nonsil': [[3992, 4002], [4045, 4060]], 'silent': [[4003, 4044]], 'dur_sil': 42, 'dur_nonsil': 27, 'rawscore': 18.100825999999994, 'e_f': 4060, 'fps': 30.0, 's_f': 3992}, {'nonsil': [[4061, 4088], [4116, 4146]], 'silent': [[4089, 4115]], 'dur_sil': 27, 'dur_nonsil': 59, 'rawscore': 27.138313000000007, 'e_f': 4146, 'fps': 30.0, 's_f': 4061}, {'nonsil': [[4147, 4205]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 59, 'rawscore': 15.150295999999994, 'e_f': 4205, 'fps': 30.0, 's_f': 4147}, {'nonsil': [[4206, 4294]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 89, 'rawscore': 26.657779000000016, 'e_f': 4294, 'fps': 30.0, 's_f': 4206}, {'nonsil': [[4295, 4400]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 106, 'rawscore': 39.54389000000001, 'e_f': 4400, 'fps': 30.0, 's_f': 4295}, {'nonsil': [[4401, 4418]], 'silent': [[4419, 4443]], 'dur_sil': 25, 'dur_nonsil': 18, 'rawscore': 12.270603999999997, 'e_f': 4443, 'fps': 30.0, 's_f': 4401}, {'nonsil': [], 'silent': [[4444, 4474]], 'dur_sil': 31, 'dur_nonsil': 0, 'rawscore': 7.762069, 'e_f': 4474, 'fps': 30.0, 's_f': 4444}, {'nonsil': [], 'silent': [[4475, 4577]], 'dur_sil': 103, 'dur_nonsil': 0, 'rawscore': 36.126366, 'e_f': 4577, 'fps': 30.0, 's_f': 4475}, {'nonsil': [[4629, 4661]], 'silent': [[4578, 4628]], 'dur_sil': 51, 'dur_nonsil': 33, 'rawscore': 30.329525, 'e_f': 4661, 'fps': 30.0, 's_f': 4578}, {'nonsil': [[4662, 4701], [4702, 4715], [4716, 4719]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 58, 'rawscore': 20.816719, 'e_f': 4719, 'fps': 30.0, 's_f': 4662}, {'nonsil': [[4720, 4784]], 'silent': [[4785, 4799]], 'dur_sil': 15, 'dur_nonsil': 65, 'rawscore': 13.289057999999999, 'e_f': 4799, 'fps': 30.0, 's_f': 4720}, {'nonsil': [[4803, 4882]], 'silent': [[4800, 4802]], 'dur_sil': 3, 'dur_nonsil': 80, 'rawscore': 15.068960000000004, 'e_f': 4882, 'fps': 30.0, 's_f': 4800}, {'nonsil': [[4883, 4970]], 'silent': [[4971, 4981]], 'dur_sil': 11, 'dur_nonsil': 88, 'rawscore': 17.480605000000004, 'e_f': 4981, 'fps': 30.0, 's_f': 4883}, {'nonsil': [[5035, 5043]], 'silent': [[4982, 5034]], 'dur_sil': 53, 'dur_nonsil': 9, 'rawscore': 18.871118, 'e_f': 5043, 'fps': 30.0, 's_f': 4982}, {'nonsil': [[5044, 5057], [5058, 5069], [5070, 5115]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 72, 'rawscore': 24.576314, 'e_f': 5115, 'fps': 30.0, 's_f': 5044}, {'nonsil': [[5116, 5181]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 66, 'rawscore': 27.785695999999998, 'e_f': 5181, 'fps': 30.0, 's_f': 5116}, {'nonsil': [[5182, 5226]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 45, 'rawscore': 10.819823000000003, 'e_f': 5226, 'fps': 30.0, 's_f': 5182}, {'nonsil': [[5227, 5298]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 72, 'rawscore': 25.833483, 'e_f': 5298, 'fps': 30.0, 's_f': 5227}, {'nonsil': [[5299, 5337]], 'silent': [[5338, 5351]], 'dur_sil': 14, 'dur_nonsil': 39, 'rawscore': 8.130922, 'e_f': 5351, 'fps': 30.0, 's_f': 5299}, {'nonsil': [[5371, 5427]], 'silent': [[5352, 5370]], 'dur_sil': 19, 'dur_nonsil': 57, 'rawscore': 26.966815000000008, 'e_f': 5427, 'fps': 30.0, 's_f': 5352}, {'nonsil': [[5428, 5429], [5430, 5444], [5445, 5462]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 35, 'rawscore': 10.699439000000002, 'e_f': 5462, 'fps': 30.0, 's_f': 5428}, {'nonsil': [[5463, 5546]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 84, 'rawscore': 60.534119, 'e_f': 5546, 'fps': 30.0, 's_f': 5463}, {'nonsil': [[5547, 5626]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 80, 'rawscore': 52.26253700000001, 'e_f': 5626, 'fps': 30.0, 's_f': 5547}, {'nonsil': [[5627, 5671]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 45, 'rawscore': 34.62448500000001, 'e_f': 5671, 'fps': 30.0, 's_f': 5627}, {'nonsil': [[5672, 5778]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 107, 'rawscore': 80.38318599999997, 'e_f': 5778, 'fps': 30.0, 's_f': 5672}, {'nonsil': [[5779, 5853]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 75, 'rawscore': 48.96836200000002, 'e_f': 5853, 'fps': 30.0, 's_f': 5779}, {'nonsil': [[5854, 5890]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 37, 'rawscore': 14.082031000000002, 'e_f': 5890, 'fps': 30.0, 's_f': 5854}, {'nonsil': [[5891, 5964]], 'silent': [[5965, 5985]], 'dur_sil': 21, 'dur_nonsil': 74, 'rawscore': 37.394533000000024, 'e_f': 5985, 'fps': 30.0, 's_f': 5891}, {'nonsil': [[5997, 6036], [6037, 6037]], 'silent': [[5986, 5996]], 'dur_sil': 11, 'dur_nonsil': 41, 'rawscore': 17.575801999999996, 'e_f': 6037, 'fps': 30.0, 's_f': 5986}, {'nonsil': [[6038, 6051], [6052, 6074]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 37, 'rawscore': 13.171059, 'e_f': 6074, 'fps': 30.0, 's_f': 6038}, {'nonsil': [[6075, 6143]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 69, 'rawscore': 48.631301, 'e_f': 6143, 'fps': 30.0, 's_f': 6075}, {'nonsil': [[6144, 6250]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 107, 'rawscore': 75.81345999999999, 'e_f': 6250, 'fps': 30.0, 's_f': 6144}, {'nonsil': [[6251, 6305]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 55, 'rawscore': 33.452994999999994, 'e_f': 6305, 'fps': 30.0, 's_f': 6251}, {'nonsil': [[6306, 6345]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 40, 'rawscore': 27.09683699999999, 'e_f': 6345, 'fps': 30.0, 's_f': 6306}, {'nonsil': [[6346, 6386]], 'silent': [[6387, 6442]], 'dur_sil': 56, 'dur_nonsil': 41, 'rawscore': 59.361756000000014, 'e_f': 6442, 'fps': 30.0, 's_f': 6346}, {'nonsil': [[6544, 6561]], 'silent': [[6443, 6543]], 'dur_sil': 101, 'dur_nonsil': 18, 'rawscore': 72.85936600000002, 'e_f': 6561, 'fps': 30.0, 's_f': 6443}, {'nonsil': [[6562, 6606]], 'silent': [[6607, 6664]], 'dur_sil': 58, 'dur_nonsil': 45, 'rawscore': 59.758494999999996, 'e_f': 6664, 'fps': 30.0, 's_f': 6562}, {'nonsil': [[6697, 6774]], 'silent': [[6665, 6696]], 'dur_sil': 32, 'dur_nonsil': 78, 'rawscore': 52.841388000000016, 'e_f': 6774, 'fps': 30.0, 's_f': 6665}, {'nonsil': [[6838, 6870]], 'silent': [[6775, 6837], [6871, 6874]], 'dur_sil': 67, 'dur_nonsil': 33, 'rawscore': 48.58940399999998, 'e_f': 6874, 'fps': 30.0, 's_f': 6775}, {'nonsil': [[6894, 6921], [6922, 6935]], 'silent': [[6875, 6893]], 'dur_sil': 19, 'dur_nonsil': 42, 'rawscore': 32.568902, 'e_f': 6935, 'fps': 30.0, 's_f': 6875}, {'nonsil': [[6936, 6936], [6937, 6956], [7011, 7032]], 'silent': [[6957, 7010]], 'dur_sil': 54, 'dur_nonsil': 43, 'rawscore': 35.88726299999999, 'e_f': 7032, 'fps': 30.0, 's_f': 6936}, {'nonsil': [[7033, 7035], [7036, 7041], [7042, 7088], [7089, 7094], [7095, 7125]], 'silent': [[7126, 7130]], 'dur_sil': 5, 'dur_nonsil': 93, 'rawscore': 52.52725299999998, 'e_f': 7130, 'fps': 30.0, 's_f': 7033}, {'nonsil': [[7158, 7163]], 'silent': [[7131, 7157]], 'dur_sil': 27, 'dur_nonsil': 6, 'rawscore': 11.427884999999998, 'e_f': 7163, 'fps': 30.0, 's_f': 7131}, {'nonsil': [[7164, 7229]], 'silent': [[7230, 7234]], 'dur_sil': 5, 'dur_nonsil': 66, 'rawscore': 32.177341, 'e_f': 7234, 'fps': 30.0, 's_f': 7164}, {'nonsil': [[7273, 7276]], 'silent': [[7235, 7272]], 'dur_sil': 38, 'dur_nonsil': 4, 'rawscore': 13.477115, 'e_f': 7276, 'fps': 30.0, 's_f': 7235}, {'nonsil': [[7277, 7313], [7335, 7339]], 'silent': [[7314, 7334]], 'dur_sil': 21, 'dur_nonsil': 42, 'rawscore': 35.453952, 'e_f': 7339, 'fps': 30.0, 's_f': 7277}, {'nonsil': [[7340, 7431]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 92, 'rawscore': 62.027275, 'e_f': 7431, 'fps': 30.0, 's_f': 7340}, {'nonsil': [[7432, 7488]], 'silent': [[7489, 7516]], 'dur_sil': 28, 'dur_nonsil': 57, 'rawscore': 50.634224999999994, 'e_f': 7516, 'fps': 30.0, 's_f': 7432}, {'nonsil': [[7557, 7570]], 'silent': [[7517, 7556]], 'dur_sil': 40, 'dur_nonsil': 14, 'rawscore': 34.069862, 'e_f': 7570, 'fps': 30.0, 's_f': 7517}, {'nonsil': [[7571, 7626]], 'silent': [[7627, 7627]], 'dur_sil': 1, 'dur_nonsil': 56, 'rawscore': 34.178999000000005, 'e_f': 7627, 'fps': 30.0, 's_f': 7571}, {'nonsil': [[7689, 7712]], 'silent': [[7628, 7688], [7713, 7716]], 'dur_sil': 65, 'dur_nonsil': 24, 'rawscore': 47.82600500000001, 'e_f': 7716, 'fps': 30.0, 's_f': 7628}, {'nonsil': [], 'silent': [[7717, 7798]], 'dur_sil': 82, 'dur_nonsil': 0, 'rawscore': 51.73315999999996, 'e_f': 7798, 'fps': 30.0, 's_f': 7717}, {'nonsil': [[7811, 7851]], 'silent': [[7799, 7810]], 'dur_sil': 12, 'dur_nonsil': 41, 'rawscore': 35.50567699999999, 'e_f': 7851, 'fps': 30.0, 's_f': 7799}, {'nonsil': [[7852, 7922]], 'silent': [[7923, 7933]], 'dur_sil': 11, 'dur_nonsil': 71, 'rawscore': 48.93068100000001, 'e_f': 7933, 'fps': 30.0, 's_f': 7852}, {'nonsil': [[7942, 7974]], 'silent': [[7934, 7941]], 'dur_sil': 8, 'dur_nonsil': 33, 'rawscore': 25.515145000000004, 'e_f': 7974, 'fps': 30.0, 's_f': 7934}, {'nonsil': [], 'silent': [[7975, 8007]], 'dur_sil': 33, 'dur_nonsil': 0, 'rawscore': 17.785547999999995, 'e_f': 8007, 'fps': 30.0, 's_f': 7975}, {'nonsil': [[8028, 8040]], 'silent': [[8008, 8027]], 'dur_sil': 20, 'dur_nonsil': 13, 'rawscore': 22.102238999999994, 'e_f': 8040, 'fps': 30.0, 's_f': 8008}, {'nonsil': [[8041, 8095]], 'silent': [[8096, 8131]], 'dur_sil': 36, 'dur_nonsil': 55, 'rawscore': 51.471981999999976, 'e_f': 8131, 'fps': 30.0, 's_f': 8041}, {'nonsil': [], 'silent': [[8132, 8166]], 'dur_sil': 35, 'dur_nonsil': 0, 'rawscore': 15.831946000000002, 'e_f': 8166, 'fps': 30.0, 's_f': 8132}, {'nonsil': [], 'silent': [[8167, 8286]], 'dur_sil': 120, 'dur_nonsil': 0, 'rawscore': 55.983444, 'e_f': 8286, 'fps': 30.0, 's_f': 8167}, {'nonsil': [], 'silent': [[8287, 8336]], 'dur_sil': 50, 'dur_nonsil': 0, 'rawscore': 13.11975, 'e_f': 8336, 'fps': 30.0, 's_f': 8287}, {'nonsil': [], 'silent': [[8337, 8408]], 'dur_sil': 72, 'dur_nonsil': 0, 'rawscore': 30.066322999999997, 'e_f': 8408, 'fps': 30.0, 's_f': 8337}, {'nonsil': [], 'silent': [[8409, 8462]], 'dur_sil': 54, 'dur_nonsil': 0, 'rawscore': 30.168117000000002, 'e_f': 8462, 'fps': 30.0, 's_f': 8409}, {'nonsil': [[8550, 8568]], 'silent': [[8463, 8549]], 'dur_sil': 87, 'dur_nonsil': 19, 'rawscore': 58.131406999999996, 'e_f': 8568, 'fps': 30.0, 's_f': 8463}, {'nonsil': [[8569, 8607], [8631, 8684]], 'silent': [[8608, 8630]], 'dur_sil': 23, 'dur_nonsil': 93, 'rawscore': 58.364087999999995, 'e_f': 8684, 'fps': 30.0, 's_f': 8569}, {'nonsil': [[8685, 8750]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 66, 'rawscore': 36.438916000000006, 'e_f': 8750, 'fps': 30.0, 's_f': 8685}, {'nonsil': [[8751, 8757], [8779, 8843]], 'silent': [[8758, 8778]], 'dur_sil': 21, 'dur_nonsil': 72, 'rawscore': 73.048908, 'e_f': 8843, 'fps': 30.0, 's_f': 8751}, {'nonsil': [[8844, 8849], [8850, 8877]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 34, 'rawscore': 26.654646999999997, 'e_f': 8877, 'fps': 30.0, 's_f': 8844}, {'nonsil': [[8878, 8980]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 103, 'rawscore': 83.29259799999998, 'e_f': 8980, 'fps': 30.0, 's_f': 8878}, {'nonsil': [[8981, 9034]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 54, 'rawscore': 37.69919399999999, 'e_f': 9034, 'fps': 30.0, 's_f': 8981}, {'nonsil': [[9035, 9063], [9064, 9075], [9076, 9076]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 42, 'rawscore': 12.886346999999997, 'e_f': 9076, 'fps': 30.0, 's_f': 9035}, {'nonsil': [[9077, 9131]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 55, 'rawscore': 33.793566, 'e_f': 9131, 'fps': 30.0, 's_f': 9077}, {'nonsil': [[9132, 9218]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 87, 'rawscore': 41.21134, 'e_f': 9218, 'fps': 30.0, 's_f': 9132}, {'nonsil': [[9219, 9271]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 53, 'rawscore': 31.125536000000007, 'e_f': 9271, 'fps': 30.0, 's_f': 9219}, {'nonsil': [[9272, 9341], [9342, 9351]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 80, 'rawscore': 53.999596, 'e_f': 9351, 'fps': 30.0, 's_f': 9272}, {'nonsil': [[9352, 9353], [9354, 9400]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 49, 'rawscore': 24.316160999999997, 'e_f': 9400, 'fps': 30.0, 's_f': 9352}, {'nonsil': [[9401, 9480]], 'silent': [[9481, 9494]], 'dur_sil': 14, 'dur_nonsil': 80, 'rawscore': 35.741654999999994, 'e_f': 9494, 'fps': 30.0, 's_f': 9401}, {'nonsil': [], 'silent': [[9495, 9584]], 'dur_sil': 90, 'dur_nonsil': 0, 'rawscore': 31.743505, 'e_f': 9584, 'fps': 30.0, 's_f': 9495}, {'nonsil': [], 'silent': [[9585, 9704]], 'dur_sil': 120, 'dur_nonsil': 0, 'rawscore': 44.67375599999997, 'e_f': 9704, 'fps': 30.0, 's_f': 9585}, {'nonsil': [], 'silent': [[9705, 9764]], 'dur_sil': 60, 'dur_nonsil': 0, 'rawscore': 21.12438, 'e_f': 9764, 'fps': 30.0, 's_f': 9705}, {'nonsil': [], 'silent': [[9765, 9854]], 'dur_sil': 90, 'dur_nonsil': 0, 'rawscore': 30.092059, 'e_f': 9854, 'fps': 30.0, 's_f': 9765}, {'nonsil': [[9943, 9964]], 'silent': [[9855, 9942]], 'dur_sil': 88, 'dur_nonsil': 22, 'rawscore': 50.918988, 'e_f': 9964, 'fps': 30.0, 's_f': 9855}, {'nonsil': [[9965, 10004]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 40, 'rawscore': 27.627440999999994, 'e_f': 10004, 'fps': 30.0, 's_f': 9965}, {'nonsil': [[10005, 10076]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 72, 'rawscore': 50.27123999999999, 'e_f': 10076, 'fps': 30.0, 's_f': 10005}, {'nonsil': [[10077, 10149]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 73, 'rawscore': 47.16266199999999, 'e_f': 10149, 'fps': 30.0, 's_f': 10077}, {'nonsil': [[10150, 10182]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 33, 'rawscore': 17.984291999999996, 'e_f': 10182, 'fps': 30.0, 's_f': 10150}, {'nonsil': [[10183, 10242]], 'silent': [[10243, 10289]], 'dur_sil': 47, 'dur_nonsil': 60, 'rawscore': 69.64934399999997, 'e_f': 10289, 'fps': 30.0, 's_f': 10183}, {'nonsil': [[10291, 10353], [10354, 10361], [10362, 10400]], 'silent': [[10290, 10290]], 'dur_sil': 1, 'dur_nonsil': 110, 'rawscore': 54.982544000000004, 'e_f': 10400, 'fps': 30.0, 's_f': 10290}, {'nonsil': [[10401, 10404], [10405, 10410], [10411, 10485]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 85, 'rawscore': 24.014665, 'e_f': 10485, 'fps': 30.0, 's_f': 10401}, {'nonsil': [[10486, 10541], [10542, 10551], [10552, 10570]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 85, 'rawscore': 20.314586, 'e_f': 10570, 'fps': 30.0, 's_f': 10486}, {'nonsil': [[10571, 10640]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 70, 'rawscore': 18.879293, 'e_f': 10640, 'fps': 30.0, 's_f': 10571}, {'nonsil': [[10641, 10696]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 56, 'rawscore': 21.452332000000006, 'e_f': 10696, 'fps': 30.0, 's_f': 10641}, {'nonsil': [[10697, 10795]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 99, 'rawscore': 40.61696199999999, 'e_f': 10795, 'fps': 30.0, 's_f': 10697}, {'nonsil': [[10796, 10866]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 71, 'rawscore': 24.67784900000001, 'e_f': 10866, 'fps': 30.0, 's_f': 10796}, {'nonsil': [[10867, 10922]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 56, 'rawscore': 14.576031000000002, 'e_f': 10922, 'fps': 30.0, 's_f': 10867}, {'nonsil': [[10923, 10973], [10974, 10986], [10987, 11034]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 112, 'rawscore': 67.24040499999998, 'e_f': 11034, 'fps': 30.0, 's_f': 10923}, {'nonsil': [[11035, 11042], [11061, 11129]], 'silent': [[11043, 11060]], 'dur_sil': 18, 'dur_nonsil': 77, 'rawscore': 45.39538200000001, 'e_f': 11129, 'fps': 30.0, 's_f': 11035}, {'nonsil': [[11130, 11172]], 'silent': [[11173, 11197]], 'dur_sil': 25, 'dur_nonsil': 43, 'rawscore': 28.003004999999998, 'e_f': 11197, 'fps': 30.0, 's_f': 11130}, {'nonsil': [[11206, 11229]], 'silent': [[11198, 11205]], 'dur_sil': 8, 'dur_nonsil': 24, 'rawscore': 17.930385000000005, 'e_f': 11229, 'fps': 30.0, 's_f': 11198}, {'nonsil': [[11230, 11317]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 88, 'rawscore': 54.772344999999994, 'e_f': 11317, 'fps': 30.0, 's_f': 11230}, {'nonsil': [[11318, 11434]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 117, 'rawscore': 73.50757700000005, 'e_f': 11434, 'fps': 30.0, 's_f': 11318}, {'nonsil': [[11435, 11448], [11476, 11537]], 'silent': [[11449, 11475]], 'dur_sil': 27, 'dur_nonsil': 76, 'rawscore': 62.712668999999984, 'e_f': 11537, 'fps': 30.0, 's_f': 11435}, {'nonsil': [[11538, 11643]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 106, 'rawscore': 48.142169, 'e_f': 11643, 'fps': 30.0, 's_f': 11538}, {'nonsil': [[11644, 11755]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 112, 'rawscore': 65.82475999999996, 'e_f': 11755, 'fps': 30.0, 's_f': 11644}, {'nonsil': [[11756, 11856]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 101, 'rawscore': 35.46947000000001, 'e_f': 11856, 'fps': 30.0, 's_f': 11756}, {'nonsil': [[11857, 11890]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 34, 'rawscore': 13.421516000000002, 'e_f': 11890, 'fps': 30.0, 's_f': 11857}, {'nonsil': [[11891, 11913], [11940, 11975]], 'silent': [[11914, 11939], [11976, 11998]], 'dur_sil': 49, 'dur_nonsil': 59, 'rawscore': 33.143808000000014, 'e_f': 11998, 'fps': 30.0, 's_f': 11891}, {'nonsil': [[12000, 12085]], 'silent': [[11999, 11999]], 'dur_sil': 1, 'dur_nonsil': 86, 'rawscore': 19.437660999999995, 'e_f': 12085, 'fps': 30.0, 's_f': 11999}, {'nonsil': [[12086, 12122], [12150, 12201]], 'silent': [[12123, 12149]], 'dur_sil': 27, 'dur_nonsil': 89, 'rawscore': 73.29139299999997, 'e_f': 12201, 'fps': 30.0, 's_f': 12086}, {'nonsil': [[12202, 12281]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 80, 'rawscore': 43.117850000000004, 'e_f': 12281, 'fps': 30.0, 's_f': 12202}, {'nonsil': [[12282, 12315], [12316, 12323], [12324, 12357]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 76, 'rawscore': 40.017168999999996, 'e_f': 12357, 'fps': 30.0, 's_f': 12282}, {'nonsil': [[12358, 12422], [12423, 12427]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 70, 'rawscore': 43.712582, 'e_f': 12427, 'fps': 30.0, 's_f': 12358}, {'nonsil': [[12428, 12435], [12436, 12477]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 50, 'rawscore': 30.198019999999996, 'e_f': 12477, 'fps': 30.0, 's_f': 12428}, {'nonsil': [[12478, 12557]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 80, 'rawscore': 59.17029700000001, 'e_f': 12557, 'fps': 30.0, 's_f': 12478}, {'nonsil': [[12558, 12671]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 114, 'rawscore': 69.48530799999999, 'e_f': 12671, 'fps': 30.0, 's_f': 12558}, {'nonsil': [[12672, 12707]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 36, 'rawscore': 9.417455, 'e_f': 12707, 'fps': 30.0, 's_f': 12672}, {'nonsil': [[12708, 12791]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 84, 'rawscore': 30.811789, 'e_f': 12791, 'fps': 30.0, 's_f': 12708}, {'nonsil': [[12792, 12835]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 44, 'rawscore': 16.245455999999997, 'e_f': 12835, 'fps': 30.0, 's_f': 12792}, {'nonsil': [[12836, 12886]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 51, 'rawscore': 17.201611999999997, 'e_f': 12886, 'fps': 30.0, 's_f': 12836}, {'nonsil': [[12887, 12969]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 83, 'rawscore': 26.894294999999996, 'e_f': 12969, 'fps': 30.0, 's_f': 12887}, {'nonsil': [[12970, 13015]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 46, 'rawscore': 11.059466, 'e_f': 13015, 'fps': 30.0, 's_f': 12970}, {'nonsil': [[13016, 13106]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 91, 'rawscore': 27.235723000000007, 'e_f': 13106, 'fps': 30.0, 's_f': 13016}, {'nonsil': [[13107, 13163]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 57, 'rawscore': 20.149671999999995, 'e_f': 13163, 'fps': 30.0, 's_f': 13107}, {'nonsil': [[13164, 13270]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 107, 'rawscore': 26.568008000000006, 'e_f': 13270, 'fps': 30.0, 's_f': 13164}, {'nonsil': [[13271, 13336]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 66, 'rawscore': 14.081869000000003, 'e_f': 13336, 'fps': 30.0, 's_f': 13271}, {'nonsil': [[13337, 13381]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 45, 'rawscore': 3.771506, 'e_f': 13381, 'fps': 30.0, 's_f': 13337}, {'nonsil': [[13382, 13421], [13422, 13431], [13432, 13493]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 112, 'rawscore': 19.854507999999996, 'e_f': 13493, 'fps': 30.0, 's_f': 13382}, {'nonsil': [[13494, 13571]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 78, 'rawscore': 16.184391000000005, 'e_f': 13571, 'fps': 30.0, 's_f': 13494}, {'nonsil': [[13572, 13648]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 77, 'rawscore': 18.698983, 'e_f': 13648, 'fps': 30.0, 's_f': 13572}, {'nonsil': [[13649, 13715]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 67, 'rawscore': 17.790553, 'e_f': 13715, 'fps': 30.0, 's_f': 13649}, {'nonsil': [[13716, 13797]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 82, 'rawscore': 16.829378000000002, 'e_f': 13797, 'fps': 30.0, 's_f': 13716}, {'nonsil': [[13798, 13856]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 59, 'rawscore': 18.272952, 'e_f': 13856, 'fps': 30.0, 's_f': 13798}, {'nonsil': [[13857, 13953]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 97, 'rawscore': 43.641774999999974, 'e_f': 13953, 'fps': 30.0, 's_f': 13857}, {'nonsil': [[13954, 14043]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 90, 'rawscore': 36.18436200000002, 'e_f': 14043, 'fps': 30.0, 's_f': 13954}, {'nonsil': [[14044, 14069]], 'silent': [[14070, 14130]], 'dur_sil': 61, 'dur_nonsil': 26, 'rawscore': 50.510666999999984, 'e_f': 14130, 'fps': 30.0, 's_f': 14044}, {'nonsil': [[14131, 14184], [14185, 14189], [14190, 14193]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 63, 'rawscore': 36.244595, 'e_f': 14193, 'fps': 30.0, 's_f': 14131}, {'nonsil': [[14194, 14248]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 55, 'rawscore': 31.788562999999996, 'e_f': 14248, 'fps': 30.0, 's_f': 14194}, {'nonsil': [[14249, 14252], [14253, 14256], [14257, 14322]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 74, 'rawscore': 47.63095199999999, 'e_f': 14322, 'fps': 30.0, 's_f': 14249}, {'nonsil': [[14323, 14376]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 54, 'rawscore': 32.487498, 'e_f': 14376, 'fps': 30.0, 's_f': 14323}, {'nonsil': [[14377, 14405], [14406, 14411], [14412, 14442]], 'silent': [[14443, 14455]], 'dur_sil': 13, 'dur_nonsil': 66, 'rawscore': 47.568675, 'e_f': 14455, 'fps': 30.0, 's_f': 14377}, {'nonsil': [[14469, 14525]], 'silent': [[14456, 14468], [14526, 14550]], 'dur_sil': 38, 'dur_nonsil': 57, 'rawscore': 58.62046900000001, 'e_f': 14550, 'fps': 30.0, 's_f': 14456}, {'nonsil': [[14571, 14582], [14583, 14589], [14590, 14598], [14599, 14610], [14611, 14619], [14620, 14627], [14628, 14652]], 'silent': [[14551, 14570]], 'dur_sil': 20, 'dur_nonsil': 82, 'rawscore': 62.610476999999975, 'e_f': 14652, 'fps': 30.0, 's_f': 14551}, {'nonsil': [[14653, 14751]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 99, 'rawscore': 63.031901999999974, 'e_f': 14751, 'fps': 30.0, 's_f': 14653}, {'nonsil': [[14752, 14802]], 'silent': [[14803, 14810]], 'dur_sil': 8, 'dur_nonsil': 51, 'rawscore': 36.028683, 'e_f': 14810, 'fps': 30.0, 's_f': 14752}, {'nonsil': [[14826, 14853], [14854, 14861], [14862, 14893]], 'silent': [[14811, 14825]], 'dur_sil': 15, 'dur_nonsil': 68, 'rawscore': 51.830728000000015, 'e_f': 14893, 'fps': 30.0, 's_f': 14811}, {'nonsil': [[14894, 14912], [14913, 14916], [14917, 14967]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 74, 'rawscore': 47.604321999999996, 'e_f': 14967, 'fps': 30.0, 's_f': 14894}, {'nonsil': [[14968, 15000], [15001, 15006], [15007, 15042]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 75, 'rawscore': 47.665567, 'e_f': 15042, 'fps': 30.0, 's_f': 14968}, {'nonsil': [[15043, 15097]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 55, 'rawscore': 34.312115, 'e_f': 15097, 'fps': 30.0, 's_f': 15043}, {'nonsil': [[15098, 15129]], 'silent': [], 'dur_sil': 0, 'dur_nonsil': 32, 'rawscore': 17.376876000000003, 'e_f': 15129, 'fps': 30.0, 's_f': 15098}, {'nonsil': [[15130, 15216]], 'silent': [[15217, 15227]], 'dur_sil': 11, 'dur_nonsil': 87, 'rawscore': 63.01294399999999, 'e_f': 15227, 'fps': 30.0, 's_f': 15130}, {'nonsil': [], 'silent': [[15228, 15305]], 'dur_sil': 78, 'dur_nonsil': 0, 'rawscore': 34.244747, 'e_f': 15305, 'fps': 30.0, 's_f': 15228}]\n"
]
}
],
"source": [
"print raw_video_shot[\"E11zDS9XGzg\"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Evaluation Utility"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"for a total value of 1272 and a total weight of 803\n",
"row: 23 column: 804\n",
"Bagged the following items\n",
" banana\n",
" camera\n",
" cheese\n",
" compass\n",
" glucose\n",
" map\n",
" note-case\n",
" sandwich\n",
" socks\n",
" sunglasses\n",
" suntan cream\n",
" waterproof overclothes\n",
" waterproof trousers\n",
"for a total value of 890 and a total weight of 298\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import json\n",
"import math\n",
"%matplotlib inline\n",
"\n",
"__author__ = 'haojian'\n",
"\n",
"\n",
"class KnapsackDP:\n",
" # each item: item, weight, value\n",
" def __init__(self):\n",
"# print \"new obj created\"\n",
" self.items = []\n",
" self.table = []\n",
" self.result = []\n",
"\n",
" def setitem(self, items):\n",
" self.items = items\n",
"\n",
" def knapsack01_dp_init(self):\n",
" val, wt = self.get_total_value(self.items)\n",
" max_limit = -wt \n",
" self.table = [[0 for w in range(max_limit + 1)] for j in xrange(len(self.items) + 1)]\n",
" for j in xrange(1, len(self.items) + 1):\n",
" item, wt, val = self.items[j-1]\n",
" for w in xrange(1, max_limit + 1):\n",
" if wt > w:\n",
" self.table[j][w] = self.table[j-1][w]\n",
" else:\n",
" self.table[j][w] = max(self.table[j-1][w], self.table[j-1][w-wt] + val)\n",
" return self.table\n",
"\n",
"\n",
" def knapsack01_dp_get_solution(self, limit):\n",
" self.result = []\n",
" val, wt = self.get_total_value(self.items)\n",
" max_limit = -wt \n",
" w = limit if limit < max_limit else max_limit\n",
" for j in range(len(self.items), 0, -1):\n",
" was_added = self.table[j][w] != self.table[j-1][w]\n",
" if was_added:\n",
" item, wt, val = self.items[j-1]\n",
" self.result.append(self.items[j-1])\n",
" w -= wt\n",
" return self.result\n",
"\n",
" def get_total_value(self, comb):\n",
" totwt = totval = 0\n",
" for item, wt, val in comb:\n",
" totwt += wt\n",
" totval += val\n",
" return (totval, -totwt)\n",
"\n",
"\n",
"# ###### test code\n",
"knap = KnapsackDP()\n",
"knap.setitem([\n",
" (\"map\", 9, 150), (\"compass\", 13, 35), (\"water\", 153, 200), (\"sandwich\", 50, 160),\n",
" (\"glucose\", 15, 60), (\"tin\", 68, 45), (\"banana\", 27, 60), (\"apple\", 39, 40),\n",
" (\"cheese\", 23, 30), (\"beer\", 52, 10), (\"suntan cream\", 11, 70), (\"camera\", 32, 30),\n",
" (\"t-shirt\", 24, 15), (\"trousers\", 48, 10), (\"umbrella\", 73, 40),\n",
" (\"waterproof trousers\", 42, 70), (\"waterproof overclothes\", 43, 75),\n",
" (\"note-case\", 22, 80), (\"sunglasses\", 7, 20), (\"towel\", 18, 12),\n",
" (\"socks\", 4, 50), (\"book\", 30, 10),\n",
" ]\n",
")\n",
"val, wt = knap.get_total_value(knap.items)\n",
"print(\"for a total value of %i and a total weight of %i\" % (val, -wt))\n",
"tmp = knap.knapsack01_dp_init()\n",
"print \"row: \", len(tmp), \"column: \", len(tmp[0])\n",
"bagged = knap.knapsack01_dp_get_solution(300)\n",
"print(\"Bagged the following items\\n \" +\n",
" '\\n '.join(sorted(item for item, _, _ in bagged)))\n",
"val, wt = knap.get_total_value(bagged)\n",
"print(\"for a total value of %i and a total weight of %i\" % (val, -wt))"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"###### load labeled data\n",
"with open('raw_video_shot.json') as data_file: \n",
" lbl_video_shot = json.load(data_file)\n",
"\n",
"# load shot scores\n",
"dict_lbl = {}\n",
"with open(\"../tvsum/data/ydata-tvsum50-anno.tsv\") as fanno:\n",
" for line in fanno:\n",
" fields = line.split('\\t')\n",
" if fields[0] in dict_lbl:\n",
" arr = np.fromstring(fields[2], dtype=int, sep=\",\")\n",
" dict_lbl[fields[0]] = np.vstack((arr, dict_lbl[fields[0]]))\n",
" else:\n",
" arr = np.fromstring(fields[2], dtype=int, sep=\",\")\n",
" dict_lbl[fields[0]] = arr"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"lbl_video_shot_20 = []\n",
"\n",
"for i in range(20):\n",
"# print i\n",
" with open('raw_video_shot.json') as data_file: \n",
" lbl_video_shot = json.load(data_file)\n",
" for vid, shots_info in lbl_video_shot.items():\n",
" for cur_shot in shots_info:\n",
" cur_lbl_scores = dict_lbl[vid][i][cur_shot['s_f']:cur_shot['e_f']+1]\n",
"# print cur_lbl_scores, len(cur_lbl_scores), sum(cur_lbl_scores)\n",
"# print cur_shot['s_f'], cur_shot['e_f']\n",
" cur_shot['lblscore'] = sum(cur_lbl_scores)\n",
"# break\n",
"# break\n",
" lbl_video_shot_20.append(lbl_video_shot)\n",
"\n",
"# print len(dict_lbl['E11zDS9XGzg'][0])\n",
"# for v_id, shots_info in lbl_video_shot.items():\n",
"# print v_id"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def getSpeedRatebyUE(score):\n",
" sil_rate = (1-score) * 10 + 1\n",
" nonsil_rate = 2-score\n",
" return sil_rate, nonsil_rate"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{u'nonsil': [[0, 8], [9, 125]], u'silent': [], u'dur_sil': 0, u'dur_nonsil': 126, u'rawscore': 53.549494, u'e_f': 125, u'fps': 24.0, u's_f': 0, 'lblscore': 330}\n",
"{u'nonsil': [[126, 192]], u'silent': [], u'dur_sil': 0, u'dur_nonsil': 67, u'rawscore': 32.847443000000005, u'e_f': 192, u'fps': 24.0, u's_f': 126, 'lblscore': 155}\n",
"{u'nonsil': [[748, 798], [831, 854]], u'silent': [[799, 830], [855, 861]], u'dur_sil': 39, u'dur_nonsil': 75, u'rawscore': 55.392189999999985, u'e_f': 861, u'fps': 24.0, u's_f': 748, 'lblscore': 182}\n",
"(1, 1)\n"
]
}
],
"source": [
"print lbl_video_shot_20[0]['Hl-__g2gn_A'][0]\n",
"print lbl_video_shot_20[0]['Hl-__g2gn_A'][1]\n",
"print lbl_video_shot_20[0]['Hl-__g2gn_A'][9]\n",
"print getSpeedRatebyUE(1)"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"## Evaluation #1 total score"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Hl-__g2gn_A 5845 4221 1624 11023\n"
]
},
{
"data": {
"image/png": "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\nAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x111ed8c50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## speedup only\n",
"# x axis time budget percentage\n",
"# y axis percentage of total score\n",
"\n",
"lbl_id = 0\n",
"\n",
"def showSpeedupOnlyScoreAlongBudgetbyVid(cur_vid):\n",
" total_sil = 0\n",
" total_nonsil = 0\n",
" total = 0\n",
" total_lbl_score = 0\n",
" for i, val in enumerate(lbl_video_shot_20[lbl_id][cur_vid]):\n",
" total_lbl_score += val['lblscore']\n",
" total_sil += val['dur_sil']\n",
" total_nonsil += val['dur_nonsil']\n",
" total += val['e_f'] - val['s_f'] + 1\n",
" print cur_vid, total, total_nonsil, total_sil, total_lbl_score\n",
" plot_data_x = []\n",
" plot_data_y = []\n",
" for percent in (x/100.0 for x in range(50,101)):\n",
" sil_rate, nonsil_rate = getSpeedRatebyUE(percent)\n",
"# print percent, sil_rate, nonsil_rate\n",
" ratio = (total_sil/sil_rate + total_nonsil/nonsil_rate)/total\n",
" plot_data_x.append(ratio)\n",
" plot_data_y.append(percent)\n",
" plt.ylim(0, 1.1)\n",
" plt.xlim(0, 1.1)\n",
" plt.ylabel('percentage of total score')\n",
" plt.xlabel('percentage of time budget')\n",
" plt.plot(plot_data_x, plot_data_y)\n",
" plt.title(\"total score with time budget \" + cur_vid)\n",
" return plot_data_x, plot_data_y\n",
"\n",
"cur_vid = 'Hl-__g2gn_A'\n",
"speedup_only_x, speedup_only_y= showSpeedupOnlyScoreAlongBudgetbyVid(cur_vid)"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5845\n"
]
},
{
"data": {
"image/png": "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\n1cuW2ZskAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11c09df90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## knapsack only\n",
"\n",
"\n",
"## dp_item_preprocess\n",
"def showKnapsackOnlyScoreAlongBudgetbyVid_lbl(cur_vid):\n",
" lbl_dp_items = [] #item, weight, value, \n",
" plot_dp_data_x = []\n",
" plot_dp_data_y = []\n",
" for i, value in enumerate(lbl_video_shot_20[lbl_id][cur_vid]):\n",
" lbl_dp_items.append((value, value['e_f'] - value['s_f'] + 1, value['lblscore']))\n",
" knap = KnapsackDP()\n",
" knap.setitem(lbl_dp_items)\n",
" total_lbl_val, total_wt = knap.get_total_value(knap.items)\n",
" print -total_wt\n",
" knap.knapsack01_dp_init()\n",
" for percent in (x/100.0 for x in range(0,101)):\n",
" bagged = knap.knapsack01_dp_get_solution(int(percent*-total_wt))\n",
" val, wt = knap.get_total_value(bagged)\n",
" plot_dp_data_x.append(percent)\n",
" plot_dp_data_y.append(float(val)/total_lbl_val)\n",
" plt.ylim(0, 1.1)\n",
" plt.xlim(0, 1.1)\n",
" plt.ylabel('percentage of total score')\n",
" plt.xlabel('percentage of time budget')\n",
" plt.plot(plot_dp_data_x, plot_dp_data_y)\n",
" return plot_dp_data_x, plot_dp_data_y\n",
"knapsack_only_x, knapsack_only_y = showKnapsackOnlyScoreAlongBudgetbyVid_lbl(cur_vid)\n",
"\n",
"\n",
"# sil_rate, nonsil_rate = getSpeedRatebyUE(percent)\n",
"# # print percent, sil_rate, nonsil_rate\n",
"# ratio = (total_sil/sil_rate + total_nonsil/nonsil_rate)/total\n",
"# plot_data_x.append(ratio)\n",
"# plot_data_y.append(percent)\n",
" \n",
"# def showKnapsackOnlyScoreAlongBudgetbyVid(cur_vid):\n",
"# cv_dp_items = [] #item, weight, value, \n",
"# for i, value in enumerate(raw_video_shot[cur_vid]):\n",
"# cv_dp_items.append(value, value['e_f'] - value['s_f'] + 1, value['rawscore'])\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 142,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nMUr8IiIZ838PTa2T2O8bywAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11bda3450>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## ElasticPlay Hybrid mode\n",
"MAX_SILENT_X = 6.0\n",
"MAX_NONSIL_X = 1.5\n",
"SPEED_STEPS = 50\n",
"\n",
"def getUE(cp, ifsilent):\n",
" score = 0\n",
" if ifsilent:\n",
" score = -0.1 * (cp - 1) + 1\n",
" else:\n",
" score = -1 * (cp - 1) + 1\n",
" return score\n",
"\n",
"def generateSpeedSet():\n",
" res = []\n",
" step_sil = (MAX_SILENT_X - 1) / SPEED_STEPS\n",
" step_nonsil = (MAX_NONSIL_X - 1) / SPEED_STEPS\n",
" for i in range(SPEED_STEPS):\n",
" cur_sil_speed = 1 + step_sil * i;\n",
" cur_nonsil_speed = 1 + step_nonsil *i;\n",
" ue = getUE(cur_sil_speed, 1)\n",
" res.append([cur_sil_speed, cur_nonsil_speed, ue])\n",
" return res\n",
"\n",
"def loadLabeledVideoDataWithSpeedSet(raw_single_video_data, speedconfigs):\n",
" lbl_ep_map = {}\n",
" for speed_idx, val in enumerate(speedconfigs):\n",
" ue = val[2]\n",
" sil_speed = val[0]\n",
" nonsil_speed = val[1]\n",
" lbl_ep_map[str(ue)] = []\n",
" for shot_info in raw_single_video_data:\n",
" new_score = shot_info['lblscore'] * ue\n",
" new_dur = int(round(shot_info['dur_sil']/sil_speed + shot_info['dur_nonsil']/nonsil_speed))\n",
" lbl_ep_map[str(ue)].append((shot_info, new_dur, new_score))\n",
"# print ue, new_dur, new_score, shot_info['e_f']\n",
"# break\n",
" return lbl_ep_map\n",
"\n",
"\n",
"def ElasticPlayLabeledScoreInit(cur_vid):\n",
" speedconfigs = generateSpeedSet()\n",
" lbl_ep_map = loadLabeledVideoDataWithSpeedSet(lbl_video_shot_20[lbl_id][cur_vid], speedconfigs)\n",
" compete_pool = {}\n",
" for ue, val in lbl_ep_map.items():\n",
" knap = KnapsackDP()\n",
" knap.setitem(val)\n",
" total_lbl_val, total_wt = knap.get_total_value(knap.items)\n",
"# print ue, -total_wt, total_lbl_val\n",
" knap.knapsack01_dp_init()\n",
" compete_pool[ue] = knap\n",
" return compete_pool\n",
"\n",
"def showElasticPlayScoreAlongBudgetbyVid_lbl(cur_vid, compete_pool):\n",
" plot_dp_data_x = []\n",
" plot_dp_data_y = []\n",
" compete_history = {}\n",
" total_orig_val, total_orig_wt = compete_pool[\"1.0\"].get_total_value(compete_pool[\"1.0\"].items)\n",
" for percent in (x/100.0 for x in range(0,101)):\n",
" best_val = 0\n",
" best_ue = 0\n",
" for ue, knap in compete_pool.items():\n",
" bagged = knap.knapsack01_dp_get_solution(int(percent*-total_orig_wt))\n",
" val, wt = knap.get_total_value(bagged)\n",
" if val > best_val:\n",
" best_val = val\n",
" best_ue = ue\n",
" \n",
" plot_dp_data_x.append(percent)\n",
"# print percent, best_ue, best_val, total_orig_val, -total_orig_wt\n",
" plot_dp_data_y.append(float(best_val)/ total_orig_val)\n",
" plt.ylim(0, 1.1)\n",
" plt.xlim(0, 1.1)\n",
" plt.ylabel('percentage of total score')\n",
" plt.xlabel('percentage of time budget')\n",
" plt.plot(plot_dp_data_x, plot_dp_data_y)\n",
" return plot_dp_data_x, plot_dp_data_y\n",
"\n",
"lbl_compete_pool = ElasticPlayLabeledScoreInit(cur_vid) # can be only run for once.\n",
"elasticplay_x, elasticplay_y = showElasticPlayScoreAlongBudgetbyVid_lbl(cur_vid, lbl_compete_pool) "
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x11beaa1d0>"
]
},
"execution_count": 130,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nlluoX78+9evXp3379oWmT6xZs2a+9ImNXBao1KxZk+DgYKc9vmbNmgAkJSVx8OBBMjIyaNKkifNa\noyUiUR0AABSXSURBVEePJi4uznl+3vSIOefm4I6d3zXm/8GDBxkzZozzejmyR0ZGOuu4ZumqWbNm\nrrK/vz/JyclA/vSOtWvXpkGDBkRGRiIiDBgwgM8//xwwSeIHDx7slCEnfWXO9tprrxEbG5tP9vj4\neDIyMvKlkXSVt6h7lMM//vEPatasyfLly9mxYwd79+6lT58+Z7x37lIlFX9Cwg/Exc3l3HOn8uab\nwq5dMH06FCPZj8VSZhSWerGo9IlHjvztT5GamlpsG3Hz5s2pUaMGCQkJzuskJiayefNmt853d3LX\ntV6LFi346KOPcvUtOTmZnj3dW+Pp2lbe9I7JyckkJCTQtKnxMB84cCDz5s3j4MGDrFmzhttuu80p\nw5nSV7oSHByMn59fvjSSzYq5EGj48OF89tlnzJgxg379+lG9evVitZOXKqfq0tNj2LlzJOed9xm/\n/tqAt94yHjyOB6/FUi45U+rFotInLly4kN9++4309HTGjx9f7AikTZo04ZprruHRRx/l1KlTZGdn\ns3fvXreTnYSEhLB3796zuubo0aN59dVX2bZtG2AmTufOnXvGc1z7l2PaAKPYp06dysaNG0lLS+OZ\nZ56hZ8+etGjRAjCpJIODg7nrrrvo3bs3gY74LD169Dhj+kpXfH196d+/P//617+cb0lvv/32WWUC\nc5V/yJAhfPXVV8ycObNU00hWKcVvEqWPoEmTu0hNvZRBg2DaNHD83y2WcsuZUi8WlT7x3XffZcCA\nAYSGhhIQEECjRo2oUaMGULDf+JnK06dPJz093ell069fP2eS9aLaGjNmDPPmzSMoKCiXy+GZrt23\nb1+eeuopBgwYQN26denUqROLFy8utH7efa4yXXnllbz00kvcdttthIaGsn//fmbPnp3r3EGDBvHz\nzz/niuXv4+NzxvSVeXn33XepXbs24eHhXHLJJQwePJg777zTrXuUt9y8eXPOP/98fHx8uPjiiwu8\nXnGoUvH4Dx+eQFzcHDp2XMk11/gREQEeXB5gqWBUhXj8SUlJ1K9fnz179uSyQ1vKL6NGjaJp06a8\n+OKLhdax8fgLISlpI4cOvUK3bn9w//1+1KwJzz3nbaksFs+zcOFCrrzySlSVxx9/nM6dO1ulX0E4\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11c917f50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## Data fuse\n",
"plt.ylim(0, 1.1)\n",
"plt.xlim(0, 1.1)\n",
"plt.ylabel('percentage of total score')\n",
"plt.xlabel('percentage of time budget')\n",
"plt.plot(speedup_only_x, speedup_only_y, 'r', label=\"speedup only\")\n",
"plt.plot(knapsack_only_x, knapsack_only_y, 'b', label=\"segment remove only\")\n",
"plt.plot(elasticplay_x, elasticplay_y, 'y', label=\"elastic play\")\n",
"plt.legend(loc='lower right', shadow=True)\n",
"plt.title(\"total score with time budget \" + cur_vid)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Evaluation #2 Recall & Precision & F-Measure"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"### Elasticplay method Recall & Precision & F-Measure"
]
},
{
"cell_type": "code",
"execution_count": 143,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.0 0 0 0\n",
"0.01 0.55 97.5119332 4\n",
"0.02 0.66 179.01695262 6\n",
"0.03 0.71 244.44984192 8\n",
"0.04 0.71 301.1583996 11\n",
"0.05 0.73 350.06745215 12\n",
"0.06 0.75 396.621663 14\n",
"0.07 0.77 440.68269245 15\n",
"0.08 0.79 482.50654146 17\n",
"0.09 0.76 525.47173452 18\n",
"0.1 0.76 566.7833114 19\n",
"0.11 0.77 606.30486917 20\n",
"0.12 0.79 647.66967765 21\n",
"0.13 0.78 687.83736918 22\n",
"0.14 0.77 727.44954898 23\n",
"0.15 0.77 767.78299213 24\n",
"0.16 0.77 807.90775912 24\n",
"0.17 0.77 846.28307148 25\n",
"0.18 0.77 885.25624341 26\n",
"0.19 0.78 923.44143294 27\n",
"0.2 0.79 960.89909393 28\n",
"0.21 0.79 998.76986982 29\n",
"0.22 0.8 1034.7564056 29\n",
"0.23 0.81 1072.99269135 29\n",
"0.24 0.81 1108.26403362 32\n",
"0.25 0.83 1144.34621457 32\n",
"0.26 0.81 1178.07527277 33\n",
"0.27 0.81 1213.93381158 34\n",
"0.28 0.83 1248.86507677 34\n",
"0.29 0.83 1283.12616952 36\n",
"0.3 0.83 1317.36988207 36\n",
"0.31 0.83 1351.07733411 38\n",
"0.32 0.83 1384.72465763 39\n",
"0.33 0.83 1419.10188315 40\n",
"0.34 0.83 1452.93908328 41\n",
"0.35 0.83 1485.93348647 42\n",
"0.36 0.83 1519.31144511 42\n",
"0.37 0.84 1551.3005802 43\n",
"0.38 0.84 1584.67728636 44\n",
"0.39 0.83 1615.99792599 46\n",
"0.4 0.85 1649.8026822 46\n",
"0.41 0.84 1680.64081416 48\n",
"0.42 0.85 1712.728393 48\n",
"0.43 0.85 1744.49816725 48\n",
"0.44 0.86 1775.91012478 49\n",
"0.45 0.84 1807.2296886 51\n",
"0.46 0.84 1838.43867984 52\n",
"0.47 0.86 1871.10097574 51\n",
"0.48 0.85 1900.9149777 54\n",
"0.49 0.86 1931.84319026 54\n",
"0.5 0.85 1962.6018084 55\n",
"0.51 0.85 1993.3300088 56\n",
"0.52 0.85 2023.63920085 59\n",
"0.53 0.85 2053.336653 58\n",
"0.54 0.86 2083.57955378 59\n",
"0.55 0.86 2112.10110978 59\n",
"0.56 0.86 2141.78350582 59\n",
"0.57 0.86 2169.95133866 61\n",
"0.58 0.88 2199.06342832 61\n",
"0.59 0.87 2226.99693852 62\n",
"0.6 0.88 2255.67516592 62\n",
"0.61 0.88 2283.92641224 62\n",
"0.62 0.88 2312.05086376 63\n",
"0.63 0.89 2340.33082355 63\n",
"0.64 0.89 2367.03276286 64\n",
"0.65 0.89 2393.79593417 65\n",
"0.66 0.88 2421.860672 67\n",
"0.67 0.89 2449.381816 67\n",
"0.68 0.9 2473.5550302 67\n",
"0.69 0.89 2498.46595413 70\n",
"0.7 0.89 2521.92941128 70\n",
"0.71 0.9 2546.917767 70\n",
"0.72 0.9 2571.8911974 70\n",
"0.73 0.9 2595.1123116 71\n",
"0.74 0.9 2618.8871085 73\n",
"0.75 0.92 2638.21465224 70\n",
"0.76 0.92 2661.00104204 72\n",
"0.77 0.92 2683.3575002 73\n",
"0.78 0.92 2702.08649496 74\n",
"0.79 0.93 2723.5522998 74\n",
"0.8 0.93 2740.1821785 75\n",
"0.81 0.93 2759.85382494 76\n",
"0.82 0.95 2774.17886505 73\n",
"0.83 0.94 2792.1985788 76\n",
"0.84 0.95 2812.1047907 76\n",
"0.85 0.95 2825.31204885 76\n",
"0.86 0.95 2842.04250075 77\n",
"0.87 0.95 2855.9303522 78\n",
"0.88 0.96 2875.34754624 78\n",
"0.89 0.96 2885.99277696 78\n",
"0.9 0.97 2898.91406303 77\n",
"0.91 0.97 2915.14249477 78\n",
"0.92 0.97 2925.65593095 79\n",
"0.93 0.98 2938.2933741 78\n",
"0.94 0.98 2955.8173323 79\n",
"0.95 0.99 2958.68548701 77\n",
"0.96 0.99 2972.43765621 78\n",
"0.97 0.99 2985.97873365 79\n",
"0.98 0.99 2985.97873365 79\n",
"0.99 1.0 2998.258545 78\n",
"1.0 1.0 3016.140135 79\n",
"0.0 0 0 0\n",
"0.01 0.6 313.2 3\n",
"0.02 0.64 601.6 6\n",
"0.03 0.76 870.2 7\n",
"0.04 0.76 1146.08 8\n",
"0.05 0.76 1383.96 10\n",
"0.06 0.76 1627.16 11\n",
"0.07 0.79 1857.29 12\n",
"0.08 0.81 2081.7 13\n",
"0.09 0.79 2283.89 15\n",
"0.1 0.81 2487.51 16\n",
"0.11 0.84 2673.72 16\n",
"0.12 0.83 2862.67 17\n",
"0.13 0.83 3031.99 19\n",
"0.14 0.83 3211.27 19\n",
"0.15 0.83 3378.93 21\n",
"0.16 0.83 3557.38 21\n",
"0.17 0.83 3725.04 22\n",
"0.18 0.85 3892.15 23\n",
"0.19 0.84 4056.36 24\n",
"0.2 0.84 4220.16 25\n",
"0.21 0.85 4381.75 26\n",
"0.22 0.85 4542.4 26\n",
"0.23 0.88 4702.72 26\n",
"0.24 0.87 4848.51 28\n",
"0.25 0.87 5005.98 28\n",
"0.26 0.88 5158.56 29\n",
"0.27 0.88 5294.96 30\n",
"0.28 0.89 5430.78 31\n",
"0.29 0.88 5574.8 32\n",
"0.3 0.88 5705.04 33\n",
"0.31 0.88 5841.44 34\n",
"0.32 0.89 5960.33 35\n",
"0.33 0.9 6093.0 35\n",
"0.34 0.9 6210.0 36\n",
"0.35 0.91 6335.42 36\n",
"0.36 0.9 6451.2 37\n",
"0.37 0.9 6566.4 38\n",
"0.38 0.9 6683.4 39\n",
"0.39 0.9 6802.2 39\n",
"0.4 0.9 6919.2 40\n",
"0.41 0.9 7029.0 41\n",
"0.42 0.91 7139.86 41\n",
"0.43 0.9 7248.6 43\n",
"0.44 0.9 7358.4 44\n",
"0.45 0.9 7461.9 45\n",
"0.46 0.9 7564.5 47\n",
"0.47 0.9 7667.1 49\n",
"0.48 0.9 7764.3 49\n",
"0.49 0.9 7855.2 51\n",
"0.5 0.92 7946.04 50\n",
"0.51 0.91 8033.48 51\n",
"0.52 0.9 8124.3 54\n",
"0.53 0.9 8218.8 54\n",
"0.54 0.9 8307.0 55\n",
"0.55 0.92 8386.72 53\n",
"0.56 0.92 8475.04 55\n",
"0.57 0.92 8557.84 57\n",
"0.58 0.93 8626.68 56\n",
"0.59 0.92 8699.52 59\n",
"0.6 0.93 8777.34 59\n",
"0.61 0.94 8843.52 58\n",
"0.62 0.94 8911.2 59\n",
"0.63 0.94 8980.76 59\n",
"0.64 0.94 9048.44 61\n",
"0.65 0.95 9111.45 61\n",
"0.66 0.95 9178.9 61\n",
"0.67 0.95 9243.5 62\n",
"0.68 0.95 9309.05 63\n",
"0.69 0.95 9373.65 63\n",
"0.7 0.95 9435.4 63\n",
"0.71 0.95 9500.0 65\n",
"0.72 0.95 9562.7 66\n",
"0.73 0.95 9623.5 67\n",
"0.74 0.95 9686.2 68\n",
"0.75 0.95 9747.0 68\n",
"0.76 0.95 9810.65 69\n",
"0.77 0.95 9868.6 70\n",
"0.78 0.95 9931.3 71\n",
"0.79 0.95 9989.25 72\n",
"0.8 0.95 10048.15 72\n",
"0.81 0.95 10105.15 74\n",
"0.82 0.95 10163.1 75\n",
"0.83 0.95 10222.0 75\n",
"0.84 0.95 10279.95 75\n",
"0.85 0.95 10337.9 77\n",
"0.86 0.95 10395.85 77\n",
"0.87 0.96 10450.56 76\n",
"0.88 0.96 10508.16 77\n",
"0.89 0.96 10550.4 78\n",
"0.9 0.97 10605.01 77\n",
"0.91 0.97 10660.3 78\n",
"0.92 0.97 10692.31 79\n",
"0.93 0.98 10746.68 78\n",
"0.94 0.98 10802.54 79\n",
"0.95 0.99 10812.78 77\n",
"0.96 0.99 10869.21 78\n",
"0.97 0.99 10912.77 79\n",
"0.98 0.99 10912.77 79\n",
"0.99 1.0 10964.0 78\n",
"1.0 1.0 11023.0 79\n"
]
}
],
"source": [
"def loadCVVideoDataWithSpeedSet(raw_single_video_data, speedconfigs):\n",
" cv_ep_map = {}\n",
" for speed_idx, val in enumerate(speedconfigs):\n",
" ue = val[2]\n",
" sil_speed = val[0]\n",
" nonsil_speed = val[1]\n",
" cv_ep_map[str(ue)] = []\n",
" for shot_info in raw_single_video_data:\n",
" new_score = shot_info['rawscore'] * ue\n",
" new_dur = int(round(shot_info['dur_sil']/sil_speed + shot_info['dur_nonsil']/nonsil_speed))\n",
" cv_ep_map[str(ue)].append((shot_info, new_dur, new_score))\n",
" return cv_ep_map\n",
"\n",
"def ElasticPlayCVScoreInit(cur_vid):\n",
" speedconfigs = generateSpeedSet()\n",
" cv_ep_map = loadCVVideoDataWithSpeedSet(raw_video_shot[cur_vid], speedconfigs)\n",
" compete_pool = {}\n",
" for ue, val in cv_ep_map.items():\n",
" knap = KnapsackDP()\n",
" knap.setitem(val)\n",
" total_lbl_val, total_wt = knap.get_total_value(knap.items)\n",
"# print ue, -total_wt, total_lbl_val\n",
" knap.knapsack01_dp_init()\n",
" compete_pool[ue] = knap\n",
" return compete_pool\n",
"\n",
"\n",
"\n",
"def getCVStrategiesOverTimebudget(cur_vid, compete_pool):\n",
" strategies = {}\n",
" total_orig_val, total_orig_wt = compete_pool[\"1.0\"].get_total_value(compete_pool[\"1.0\"].items)\n",
" for percent in (x/100.0 for x in range(0,101)):\n",
" best_val = 0\n",
" best_ue = 0\n",
" best_strategy = []\n",
" for ue, knap in compete_pool.items():\n",
" bagged = knap.knapsack01_dp_get_solution(int(percent*-total_orig_wt))\n",
" val, wt = knap.get_total_value(bagged)\n",
" if val > best_val:\n",
" best_val = val\n",
" best_ue = ue\n",
" best_strategy = bagged\n",
" print percent, best_ue, best_val, len(best_strategy)\n",
" strategies[percent] = best_strategy\n",
"# break\n",
" return strategies\n",
"\n",
"def getStrategiesOverTimebudget(cur_vid, compete_pool):\n",
" strategies = {}\n",
" total_orig_val, total_orig_wt = compete_pool[\"1.0\"].get_total_value(compete_pool[\"1.0\"].items)\n",
" for percent in (x/100.0 for x in range(0,101)):\n",
" best_val = 0\n",
" best_ue = 0\n",
" best_strategy = []\n",
" for ue, knap in compete_pool.items():\n",
" bagged = knap.knapsack01_dp_get_solution(int(percent*-total_orig_wt))\n",
" val, wt = knap.get_total_value(bagged)\n",
" if val > best_val:\n",
" best_val = val\n",
" best_ue = ue\n",
" best_strategy = bagged\n",
" print percent, best_ue, best_val, len(best_strategy)\n",
" strategies[percent] = best_strategy\n",
"# break\n",
" return strategies\n",
"\n",
"\n",
"# cv_compete_pool = ElasticPlayCVScoreInit(cur_vid) # can be only run for once.\n",
"cv_strategies = getStrategiesOverTimebudget(cur_vid, cv_compete_pool)\n",
"lbl_strategies = getStrategiesOverTimebudget(cur_vid, lbl_compete_pool)"
]
},
{
"cell_type": "code",
"execution_count": 177,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11d2498d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"### measure Recall & Precision & F-Measure\n",
"\n",
"# quick hack\n",
"def findIntersect(list1, list2):\n",
" intersection = []\n",
" for idx1, item1 in enumerate(list1):\n",
" for idx2, item2 in enumerate(list2):\n",
" if item1[0][\"s_f\"] == item2[0][\"s_f\"] and item1[0][\"e_f\"] == item2[0][\"e_f\"]:\n",
" intersection.append((item1[0][\"s_f\"], item1[0][\"e_f\"]))\n",
"# print intersection\n",
" return intersection\n",
"\n",
"def findNotIn(list1, list2):\n",
" notin = []\n",
" for idx1, item1 in enumerate(list1):\n",
" ifin = False\n",
" for idx2, item2 in enumerate(list2):\n",
" if item1[0][\"s_f\"] == item2[0][\"s_f\"] and item1[0][\"e_f\"] == item2[0][\"e_f\"]:\n",
" ifin = True\n",
" if not ifin:\n",
" notin.append((item1))\n",
" return notin\n",
"\n",
"\n",
"def measure_recall_precision_fmeasure(cv_strategies, lbl_strategies):\n",
" complete_lbl_set = lbl_strategies[1.0]\n",
" complete_cv_set = cv_strategies[1.0]\n",
" plot_percent_data_x = []\n",
" plot_fmeasure_data_y = []\n",
" plot_recall_data_y = []\n",
" plot_precision_data_y = []\n",
" for percent in (x/100.0 for x in range(0,101)):\n",
" TP = len(findIntersect(cv_strategies[percent], lbl_strategies[percent])) ## true positive\n",
" FN = len(findNotIn(lbl_strategies[percent], cv_strategies[percent]))\n",
" FP = len(findNotIn(cv_strategies[percent], lbl_strategies[percent]))\n",
" TN = len(findIntersect(findNotIn(complete_lbl_set, lbl_strategies[percent]), findNotIn(complete_cv_set, cv_strategies[percent])))\n",
" if(TP+FP == 0) or (TP+FN == 0):\n",
" continue\n",
" precision = float(TP)/(TP+FP)\n",
" recall = float(TP)/(TP+FN)\n",
" beta = 1\n",
" if ((beta*beta*precision) + recall) == 0:\n",
" continue\n",
" f_measure = (beta+beta)*precision*recall/((beta*beta*precision) + recall)##\n",
"# print percent, TP, FN, FP, TN, precision, recall, f_measure\n",
" plot_percent_data_x.append(percent)\n",
" plot_fmeasure_data_y.append(f_measure)\n",
" plot_recall_data_y.append(recall)\n",
" plot_precision_data_y.append(precision)\n",
" \n",
" plt.ylim(0, 1.1)\n",
" plt.xlim(0, 1.1)\n",
" plt.ylabel('percentage of total score')\n",
" plt.xlabel('percentage of time budget')\n",
" plt.plot(plot_percent_data_x, plot_fmeasure_data_y, 'r', label=\"F-measure\")\n",
" plt.plot(plot_percent_data_x, plot_recall_data_y, 'b', label=\"recall\")\n",
" plt.plot(plot_percent_data_x, plot_precision_data_y, 'y', label=\"precision\")\n",
" plt.legend(loc='lower right', shadow=True)\n",
" plt.title(\"total score with time budget \" + cur_vid)\n",
" return plot_percent_data_x, plot_fmeasure_data_y\n",
" \n",
"# intersect = findIntersect(cv_strategies[1.0], lbl_strategies[1.0])\n",
"# print len(intersect)\n",
"# notin = findNotIn(cv_strategies[1.0], lbl_strategies[0.99])\n",
"# print len(notin)\n",
"elasticplay_x, elasticplay_fmeasure = measure_recall_precision_fmeasure(cv_strategies, lbl_strategies)\n",
"# print cv_strategies[0.01]\n",
"# print lbl_strategies[0.01]\n",
"# print lbl_strategies[1.0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Knapsack only method Recall & Precision & F-Measure"
]
},
{
"cell_type": "code",
"execution_count": 189,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x14085e310>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def loadKnapsackonlyDPitems(raw_single_video_data, scorekey):\n",
" knapsack_only_dp_items = []\n",
" for i, shot_info in enumerate(raw_single_video_data):\n",
" knapsack_only_dp_items.append((shot_info, shot_info['e_f'] - shot_info['s_f'] + 1, shot_info[scorekey]))\n",
" return knapsack_only_dp_items\n",
"\n",
"knapsack_only_cv_dp_items = loadKnapsackonlyDPitems(raw_video_shot[cur_vid], 'rawscore')\n",
"knapsack_only_lbl_dp_items = loadKnapsackonlyDPitems(lbl_video_shot_20[lbl_id][cur_vid], 'lblscore')\n",
"\n",
"# print len(findNotIn(knapsack_only_cv_dp_items, knapsack_only_lbl_dp_items))\n",
"\n",
"def measure_knapsack_only_precision_fmeasure(knapsack_only_cv_dp_items, knapsack_only_lbl_dp_items):\n",
" plot_percent_data_x = []\n",
" plot_fmeasure_data_y = []\n",
" plot_recall_data_y = []\n",
" plot_precision_data_y = []\n",
" \n",
" knap_cv = KnapsackDP()\n",
" knap_cv.setitem(knapsack_only_cv_dp_items)\n",
" total_cv_val, total_cv_wt = knap_cv.get_total_value(knap_cv.items)\n",
" knap_cv.knapsack01_dp_init()\n",
" knap_lbl = KnapsackDP()\n",
" knap_lbl.setitem(knapsack_only_lbl_dp_items)\n",
" total_lbl_val, total_lbl_wt = knap_lbl.get_total_value(knap_lbl.items)\n",
" knap_lbl.knapsack01_dp_init()\n",
" for percent in (x/100.0 for x in range(0,101)):\n",
" bagged_cv = knap_cv.knapsack01_dp_get_solution(int(percent*-total_cv_wt))\n",
" bagged_lbl = knap_lbl.knapsack01_dp_get_solution(int(percent*-total_lbl_wt))\n",
" TP = len(findIntersect(bagged_cv, bagged_lbl)) ## true positive\n",
" FN = len(findNotIn(bagged_lbl, bagged_cv))\n",
" FP = len(findNotIn(bagged_cv, bagged_lbl))\n",
" TN = len(findIntersect(findNotIn(knapsack_only_lbl_dp_items, bagged_lbl), findNotIn(knapsack_only_cv_dp_items, bagged_cv)))\n",
"# print percent, TP, FN, FP, TN\n",
" if(TP+FP == 0) or (TP+FN == 0):\n",
" continue\n",
" precision = float(TP)/(TP+FP)\n",
" recall = float(TP)/(TP+FN)\n",
" beta = 1\n",
" if ((beta*beta*precision) + recall) == 0:\n",
" continue\n",
" f_measure = (beta+beta)*precision*recall/((beta*beta*precision) + recall)##\n",
"# print percent, TP, FN, FP, TN, precision, recall, f_measure\n",
" plot_percent_data_x.append(percent)\n",
" plot_fmeasure_data_y.append(f_measure)\n",
" plot_recall_data_y.append(recall)\n",
" plot_precision_data_y.append(precision)\n",
" plt.ylim(0, 1.1)\n",
" plt.xlim(0, 1.1)\n",
" plt.ylabel('percentage of total score')\n",
" plt.xlabel('percentage of time budget')\n",
" plt.plot(plot_percent_data_x, plot_fmeasure_data_y, 'r', label=\"F-measure\")\n",
" plt.plot(plot_percent_data_x, plot_recall_data_y, 'b', label=\"recall\")\n",
" plt.plot(plot_percent_data_x, plot_precision_data_y, 'y', label=\"precision\")\n",
" plt.legend(loc='lower right', shadow=True)\n",
" plt.title(\"Knapsack only fmeasure/recall/precision \" + cur_vid)\n",
" return plot_percent_data_x, plot_fmeasure_data_y\n",
"\n",
"knapsack_only_x, knapsack_only_fmeasure = measure_knapsack_only_precision_fmeasure(knapsack_only_cv_dp_items, knapsack_only_lbl_dp_items)"
]
},
{
"cell_type": "code",
"execution_count": 190,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x1418e78d0>"
]
},
"execution_count": 190,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11d051110>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## f measure comparison\n",
"plt.ylim(0, 1.1)\n",
"plt.xlim(0, 1.1)\n",
"plt.ylabel('fmeasure')\n",
"plt.xlabel('percentage of time budget')\n",
"plt.plot(knapsack_only_x, knapsack_only_fmeasure, 'r', label=\"Knapsack only method\")\n",
"plt.plot(elasticplay_x, elasticplay_fmeasure, 'b', label=\"ElasticPlay\")\n",
"plt.title(\"fmeasure comparison \" + cur_vid)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"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.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.