Newer
Older
{
"cells": [
{
"cell_type": "markdown",
"id": "8666f97c-92c8-42ea-b025-2030dd3f3a9b",
"metadata": {},
"source": [
"cell_type": "code",
"execution_count": 6,
"id": "159f69e5-6a90-40da-b905-dfd27ac5e694",
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The autoreload extension is already loaded. To reload it, use:\n",
" %reload_ext autoreload\n"
]
}
],
"source": []
"execution_count": 7,
"id": "c9c3ebe6-7e58-45b4-b847-20a5fffcd463",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"from pathlib import Path\n",
"import os\n",
"\n",
"from tracking.global_tracker import GlobalTracker\n",
"from tracking.embedtrack import run_embedtrack"
]
},
{
"cell_type": "markdown",
"id": "21576aad-539a-4bfe-b41a-d9045d767208",
"metadata": {},
"source": [
"### 2. Set configuration"
"execution_count": 8,
"id": "f2abf94a-3b99-4a06-9109-90a60ed29e22",
"# according the data you have in DATA folder, set the hyperparameters\n",
"dataset_name = 'BF-C2DL-HSC'\n",
"subsets = ['train']\n",
"seqs = ['01', '02']\n",
"max_dist = 42\n",
"vertex_thr = 0.95\n",
"lm_dist = 80\n",
"\n",
"experiment = f'MU-CZ_CTC23'"
"cell_type": "markdown",
"id": "1cb3c9eb-213e-419e-a0f5-b8771d2d692b",
"execution_count": 9,
"id": "90e2394e-5a77-4a97-9df1-c2049403cb5d",
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"creating graph\n",
"GET GRAPH: adding vertices\n",
"GET GRAPH: adding edges\n",
"creating tracking file\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|███████████████████████████████████| 201/201 [00:00<00:00, 77358.70it/s]\n",
"divisions: 100%|███████████████████████| 179/179 [00:00<00:00, 567483.31it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Added 99 division candidates.\n",
"<itertools.chain object at 0x7f55c7edd040>\n",
"CORRECT, 278 99\n",
"computing solution\n",
"[mem] ctor: size=49392123904B (46GiB) -> memory_=0x7f42e7f72010\n",
"Set parameter Username\n",
"Academic license - for non-commercial use only - expires 2024-06-21\n",
"[mem] finalize: size=69104 (0.0659027 MiB)\n",
"it=100 lb=-72.241677663677137 ub=-72.241677663676271 gap=1.1999473680315842e-12% t=0.0055045570000000002\n",
"it=200 lb=-72.241677663677109 ub=-72.241677663676271 gap=1.1606048153783854e-12% t=0.010968277\n",
"final solution: -72.2416776636763\n",
"source file RESULTS/MU-CZ_CTC23/train/BF-C2DL-HSC/56_RES/tracking.txt\n",
"source solution RESULTS/MU-CZ_CTC23/train/BF-C2DL-HSC/56_RES/tracking.sol\n",
"saving RESULTS/MU-CZ_CTC23/train/BF-C2DL-HSC/56_RES/res_track.txt\n",
"storing res images\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|███████████████████████████████████████| 20/20 [00:00<00:00, 166.44it/s]\n",
"rm: cannot remove '/home/xlux/PROJECTS/TRACKING/twin/global-linking/DATA/train/BF-C2DL-HSC/56_RES': No such file or directory\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"/home/xlux/PROJECTS/TRACKING/twin/global-linking/RESULTS/MU-CZ_CTC23/train/BF-C2DL-HSC/56_RES\n",
"ERROR: procedure $rm /home/xlux/PROJECTS/TRACKING/twin/global-linking/DATA/train/BF-C2DL-HSC/56_RES failed with an output 1\n",
"running ./ctc_metrics/TRAMeasure DATA/train/BF-C2DL-HSC 56 4\n",
"TRA measure: 0.956236\n",
"running ./ctc_metrics/DETMeasure DATA/train/BF-C2DL-HSC 56 4\n",
"DET measure: 0.950000\n",
"running ./ctc_metrics/SEGMeasure DATA/train/BF-C2DL-HSC 56 4\n",
"The directory 'DATA/train/BF-C2DL-HSC/56_GT/SEG/' does not exist!\n",
"ERROR: procedure $./ctc_metrics/SEGMeasure DATA/train/BF-C2DL-HSC 56 4 failed with an output 255\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|█████████████████████████████████| 980/980 [00:00<00:00, 1335852.43it/s]\n",
"100%|█████████████████████████████████| 123/123 [00:00<00:00, 1059341.67it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"running embedtrack with the following arguments: {'batch_size': '1', 'sequence': '01', 'data_path': 'DATA/train/BF-C2DL-HSC', 'model_path': 'EmbedTrack/models/BF-C2DL-HSC/MU-CZ_CTC23'}\n",
"running inference(DATA/train/BF-C2DL-HSC/01, EmbedTrack/models/BF-C2DL-HSC/MU-CZ_CTC23/best_iou_model.pth, EmbedTrack/models/BF-C2DL-HSC/MU-CZ_CTC23/config.json, batch_size=1)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Traceback (most recent call last):\n",
" File \"EmbedTrack/embedtrack.py\", line 69, in <module>\n",
" main(args['data_path'], args['sequence'], args['model_path'], args['batch_size'])\n",
" File \"EmbedTrack/embedtrack.py\", line 62, in main\n",
" inference(img_path, model_path, config_file, batch_size=batch_size, overlap=0.25)\n",
" File \"/home/xlux/PROJECTS/TRACKING/twin/global-linking/EmbedTrack/embedtrack/infer/infer_ctc_data.py\", line 72, in inference\n",
" os.path.join(raw_data_path, os.listdir(raw_data_path)[0])\n",
"FileNotFoundError: [Errno 2] No such file or directory: 'DATA/train/BF-C2DL-HSC/01'\n"
"name": "stdout",
"output_type": "stream",
"text": [
"ERROR: procedure $python3 EmbedTrack/embedtrack.py --sequence 01 --data_path DATA/train/BF-C2DL-HSC --model_path EmbedTrack/models/BF-C2DL-HSC/MU-CZ_CTC23 --batch_size 1 failed with an output 1\n",
"creating graph\n"
]
"ename": "FileNotFoundError",
"evalue": "[Errno 2] No such file or directory: 'DATA/train/BF-C2DL-HSC/01_DATA'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[9], line 34\u001b[0m\n\u001b[1;32m 31\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m res_path\u001b[38;5;241m.\u001b[39mexists():\n\u001b[1;32m 32\u001b[0m os\u001b[38;5;241m.\u001b[39mmakedirs(res_path)\n\u001b[0;32m---> 34\u001b[0m tr \u001b[38;5;241m=\u001b[39m \u001b[43mGlobalTracker\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata_path\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 35\u001b[0m \u001b[43m \u001b[49m\u001b[43mres_path\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 36\u001b[0m \u001b[43m \u001b[49m\u001b[43mmax_dist\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmax_dist\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 37\u001b[0m \u001b[43m \u001b[49m\u001b[43mvertex_thr\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvertex_thr\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;66;03m# create tracking.sol and tracking.txt\u001b[39;00m\n\u001b[1;32m 41\u001b[0m tr\u001b[38;5;241m.\u001b[39mrun_tracking(limit_dist\u001b[38;5;241m=\u001b[39mlm_dist)\n",
"File \u001b[0;32m~/PROJECTS/TRACKING/twin/global-linking/tracking/global_tracker.py:101\u001b[0m, in \u001b[0;36mGlobalTracker.__init__\u001b[0;34m(self, data_path, res_path, mean_dist, max_dist, vertex_thr, app_cost, edge_min_cost, normalize, n_edges, min_frame, max_frame)\u001b[0m\n\u001b[1;32m 98\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmin_frame \u001b[38;5;241m=\u001b[39m min_frame\n\u001b[1;32m 99\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmax_frame \u001b[38;5;241m=\u001b[39m max_frame\n\u001b[0;32m--> 101\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgraph \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_graph\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
"File \u001b[0;32m~/PROJECTS/TRACKING/twin/global-linking/tracking/global_tracker.py:110\u001b[0m, in \u001b[0;36mGlobalTracker.create_graph\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 106\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcreate_graph\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 107\u001b[0m \u001b[38;5;66;03m# create graph\u001b[39;00m\n\u001b[1;32m 108\u001b[0m \u001b[38;5;66;03m# TODO: limit to min_frame/max_frame\u001b[39;00m\n\u001b[1;32m 109\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcreating graph\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m--> 110\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mget_graph_bk\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 111\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata_path\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 112\u001b[0m \u001b[43m \u001b[49m\u001b[43mmin_frame\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmin_frame\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 113\u001b[0m \u001b[43m \u001b[49m\u001b[43mmax_frame\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_frame\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 114\u001b[0m \u001b[43m \u001b[49m\u001b[43mn_edges\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mn_edges\u001b[49m\u001b[43m)\u001b[49m\n",
"File \u001b[0;32m~/PROJECTS/TRACKING/twin/global-linking/tracking/global_tracker.py:281\u001b[0m, in \u001b[0;36mget_graph_bk\u001b[0;34m(data_path, n_edges, min_frame, max_frame)\u001b[0m\n\u001b[1;32m 258\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m'''\u001b[39;00m\n\u001b[1;32m 259\u001b[0m \u001b[38;5;124;03mcreates instance of candidate graph\u001b[39;00m\n\u001b[1;32m 260\u001b[0m \u001b[38;5;124;03m\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 277\u001b[0m \u001b[38;5;124;03m\u001b[39;00m\n\u001b[1;32m 278\u001b[0m \u001b[38;5;124;03m'''\u001b[39;00m\n\u001b[1;32m 280\u001b[0m \u001b[38;5;66;03m# create an empty graph structure\u001b[39;00m\n\u001b[0;32m--> 281\u001b[0m graph \u001b[38;5;241m=\u001b[39m \u001b[43mFlowGraph\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata_path\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 283\u001b[0m \u001b[38;5;66;03m# compute distances\u001b[39;00m\n\u001b[1;32m 284\u001b[0m pd_edge_path \u001b[38;5;241m=\u001b[39m os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mjoin(data_path, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124medge_prob_distance.csv\u001b[39m\u001b[38;5;124m'\u001b[39m)\n",
"File \u001b[0;32m~/PROJECTS/TRACKING/twin/global-linking/tracking/graph.py:33\u001b[0m, in \u001b[0;36mFlowGraph.__init__\u001b[0;34m(self, res_path)\u001b[0m\n\u001b[1;32m 30\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m res_path\u001b[38;5;241m.\u001b[39mexists(), res_path\n\u001b[1;32m 32\u001b[0m \u001b[38;5;66;03m# get datset of frames \u001b[39;00m\n\u001b[0;32m---> 33\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdataset \u001b[38;5;241m=\u001b[39m \u001b[43mDataset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mres_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname_pattern\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mmask\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 36\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m'''\u001b[39;00m\n\u001b[1;32m 37\u001b[0m \u001b[38;5;124;03m#########\u001b[39;00m\n\u001b[1;32m 38\u001b[0m \u001b[38;5;124;03mOUTPUTS\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 43\u001b[0m \u001b[38;5;124;03musing this index you can get vertices that it represents\u001b[39;00m\n\u001b[1;32m 44\u001b[0m \u001b[38;5;124;03m'''\u001b[39;00m\n\u001b[1;32m 45\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39medges \u001b[38;5;241m=\u001b[39m {} \u001b[38;5;66;03m# edges[e_idx] = (v_idx, v_idx)\u001b[39;00m\n",
"File \u001b[0;32m~/PROJECTS/TRACKING/twin/global-linking/tracking/my_utils/image.py:91\u001b[0m, in \u001b[0;36mDataset.__init__\u001b[0;34m(self, data_path, name_pattern, max_size)\u001b[0m\n\u001b[1;32m 89\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39misdir(data_path), data_path\n\u001b[1;32m 90\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_path \u001b[38;5;241m=\u001b[39m data_path\n\u001b[0;32m---> 91\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_files \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msorted\u001b[39m([os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mjoin(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_path, name) \u001b[38;5;28;01mfor\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlistdir\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_path\u001b[49m\u001b[43m)\u001b[49m \\\n\u001b[1;32m 92\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m.tif\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m name \u001b[38;5;129;01mand\u001b[39;00m name_pattern \u001b[38;5;129;01min\u001b[39;00m name])\n\u001b[1;32m 93\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_max_size \u001b[38;5;241m=\u001b[39m max_size\n\u001b[1;32m 94\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_len \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_files)\n",
"\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'DATA/train/BF-C2DL-HSC/01_DATA'"
]
}
],
"source": [
"for subset in subsets:\n",
" for seq in seqs:\n",
"\n",
" # learn data path\n",
" data_path = Path('DATA',\n",
" subset,\n",
" dataset_name,\n",
" f'{seq}_DATA')\n",
" # run EmbedTrack procedure\n",
" if not os.path.isdir(data_path):\n",
" model_path = Path('EmbedTrack',\n",
" 'models',\n",
" dataset_name,\n",
" experiment)\n",
" assert os.path.isdir(model_path)\n",
" run_embedtrack(os.path.dirname(data_path), seq, model_path)\n",
" # create result directory\n",
" res_path = Path('RESULTS',\n",
" experiment,\n",
" subset,\n",
" dataset_name,\n",
" f'{seq}_RES')\n",
" if not res_path.exists():\n",
" os.makedirs(res_path)\n",
" tr = GlobalTracker(data_path,\n",
" res_path,\n",
" max_dist=max_dist,\n",
" vertex_thr=vertex_thr)\n",
" # create tracking.sol and tracking.txt\n",
" tr.run_tracking(limit_dist=lm_dist)\n",
" # evaluate\n",
" tr.save_results_ctc()\n",
" tr.evaluate_ctc()\n",
" tr.solution_stats()"
]
},
{
"cell_type": "markdown",
"id": "88691d44-c2cb-4780-9789-1d47f5dda8ba",
"metadata": {},
"source": [
"### 4. See results\n",
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "0e69c4f8-8940-43a9-a6bb-419a1d2f7bca",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}