{"id":111,"date":"2020-12-22T20:24:51","date_gmt":"2020-12-22T20:24:51","guid":{"rendered":"http:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/?page_id=111"},"modified":"2020-12-23T03:45:21","modified_gmt":"2020-12-23T03:45:21","slug":"self-supervised-scene-flow-estimation","status":"publish","type":"page","link":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/self-supervised-scene-flow-estimation\/","title":{"rendered":"Self-supervised Scene Flow Estimation"},"content":{"rendered":"\n<p class=\"has-text-align-center\"><strong>Method<\/strong><\/p>\n\n\n\n<p>In this section, we will introduce the method we built for self-supervised scene flow estimation for deformable objects in detail. Our method is based upon the work Just Go With the Flow [1]. It is an extension from FlowNet3D [2] from supervised leanring to self-supervised learning, as shown in Figure 1.  Just Go With the Flow focuses on scene flow estimation in rigid body scenarios, such as self-driving cars. We started from this baseline and modified it to work on non-rigid objects in our case. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"382\" src=\"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/image-9-1024x382.png\" alt=\"\" class=\"wp-image-184\" srcset=\"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/image-9-1024x382.png 1024w, https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/image-9-300x112.png 300w, https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/image-9-768x287.png 768w, https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/image-9-1536x573.png 1536w, https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/image-9.png 1621w\" sizes=\"auto, (max-width: 706px) 89vw, (max-width: 767px) 82vw, 740px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"333\" src=\"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/self-loss-1024x333.png\" alt=\"\" class=\"wp-image-122\" srcset=\"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/self-loss-1024x333.png 1024w, https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/self-loss-300x97.png 300w, https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/self-loss-768x249.png 768w, https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/self-loss-1536x499.png 1536w, https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/self-loss.png 1666w\" sizes=\"auto, (max-width: 706px) 89vw, (max-width: 767px) 82vw, 740px\" \/><figcaption>Figure 1: Upper: Network architecture of FlowNet3D. Lower: Two self-supervised losses are used to learn scene \ufb02ow in a self-supervised manner. The \u201cnearest neighbor loss\u201d penalizes the distance between the predicted point cloud and each predicted point\u2019s nearest neighbor in the second point cloud. The <em>\u201ccycle consistency loss\u201d<\/em>  <em>penalizes the distance between the cyclic<\/em> <em> (forward then backward) predicted point cloud and the original point cloud t<\/em>o avoid degenerated solutions. <\/figcaption><\/figure>\n\n\n\n<p>One major issue when we applied Just Go With the Flow to deformable objects is the vanishing training signal. We observed that when we use consecutive frames of point cloud to train the network, the learned flow prediction collapsed to zero vector. Our analysis on this phenomenon is that deformation between consecutive point clouds in our dataset is too small to supervise a meaningful flow prediction, so that the flow prediction degenerates to the trivial solution. We then experimented with different frame intervals between the pair of point clouds used in training, as shown in Figure 2. <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/E9wY9BQ8oUd1m6exWUnW5Ysb2qQWvC0Avs1NYlfW-rBWR-I3uCqPyfZxjJzczxjoPajxyeffE7xaf2f4CYIpQv4Olp_Gw4mUlot2kJGvE9yxku3YO82LpkTCf0rG9n_eep9zT3Vk\" alt=\"\" \/><figcaption>Figure 2: Plot of how average test losses vary against different frame intervals. Trivial loss_ds represents the nearest neighbor loss of zero predicted flow vector on independently downsampled  point clouds.  <em>Trivial loss_dsnn represents the nearest neighbor loss of zero predicted flow vector on nearest-neighbor-dependent downsampled point clouds.<\/em> Train and test losses are the <em>nearest neighbor<\/em> loss of the flow prediction from the model. We can observe that when frame interval equals to 1, which means we use consecutive frames of point cloud, the model is not predicting a meaningful flow vector. But as we increase the frame interval, the model start to learning effective flow predictions which deviate significantly from trivial losses. <\/figcaption><\/figure>\n\n\n\n<p>Now we will show some flow estimation results with different frame intervals used in training. In Figure 3, we show the flow prediction result when frame interval equals to 1. <em>We can observe that the relative magnitude of the predicted flow is not large enough to move the original point cloud closely to the target point cloud. <\/em><\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong>Results<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"906\" height=\"519\" src=\"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/f1.png\" alt=\"\" class=\"wp-image-78\" srcset=\"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/f1.png 906w, https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/f1-300x172.png 300w, https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/f1-768x440.png 768w\" sizes=\"auto, (max-width: 706px) 89vw, (max-width: 767px) 82vw, 740px\" \/><figcaption><em>Figure 3<\/em>: Flow prediction with frame interval = 1. Left figure is the visualization of point cloud 1.  <em>Right figure is the visualization of 3 point clouds overlayed. <\/em><br><em>Red: Original point cloud<\/em>  <br>Blue: Pseudo-GT<br>Green: Prediction (original point cloud + estimated flow) <\/figcaption><\/figure>\n\n\n\n<p>In Figure 4 and Figure 5, we further increased the frame interval to visualize the predicted flow. We can observe that the predicted point cloud can still align well with the original point cloud even under large frame intervals. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"354\" src=\"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/f5-1024x354.png\" alt=\"\" class=\"wp-image-81\" srcset=\"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/f5-1024x354.png 1024w, https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/f5-300x104.png 300w, https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/f5-768x266.png 768w, https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/f5.png 1234w\" sizes=\"auto, (max-width: 706px) 89vw, (max-width: 767px) 82vw, 740px\" \/><figcaption><em>Figure 4:<\/em> <em>Flow prediction with frame interval = 5 (left) and 10 (right). <\/em><br><em>Red: Original point cloud<\/em><br><em>Blue: Pseudo-GT<\/em><br><em>Green: Prediction (original point cloud + estimated flow)<\/em><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/f100-1024x389.png\" alt=\"\" class=\"wp-image-82\" width=\"644\" height=\"244\" srcset=\"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/f100-1024x389.png 1024w, https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/f100-300x114.png 300w, https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/f100-768x292.png 768w, https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/f100.png 1114w\" sizes=\"auto, (max-width: 644px) 100vw, 644px\" \/><figcaption><em>Figure 5:<\/em> <em>Flow prediction with frame interval = 100 (left) and 200 (right). <\/em><br><em>Red: Original point cloud<\/em><br><em>Blue: Pseudo-GT<\/em><br><em>Green: Prediction (original point cloud + estimated flow)<\/em><\/figcaption><\/figure>\n\n\n\n<p>We chose to use frame interval = 5 at last because it doesn&#8217;t degenerate the predicted flow to trivial solution or make the flow prediction too ambiguous under large deformation. <\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong>References<\/strong><\/p>\n\n\n\n<p>[1] Mittal, Himangi et al. \u201cJust Go with the Flow: Self-Supervised Scene Flow Estimation.\u201d ArXiv abs\/1912.00497 (2019): n. pag.<\/p>\n\n\n\n<p>[2]  Liu, Xingyu et al. \u201cFlowNet3D: Learning Scene Flow in 3D Point Clouds.\u201d&nbsp;<em>2019 IEEE\/CVF Conference on Computer Vision and Pattern Recognition (CVPR)<\/em>&nbsp;(2019): 529-537. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Method In this section, we will introduce the method we built for self-supervised scene flow estimation for deformable objects in detail. Our method is based upon the work Just Go With the Flow [1]. It is an extension from FlowNet3D [2] from supervised leanring to self-supervised learning, as shown in Figure 1. Just Go With &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/self-supervised-scene-flow-estimation\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Self-supervised Scene Flow Estimation&#8221;<\/span><\/a><\/p>\n","protected":false},"author":97,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-111","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Self-supervised Scene Flow Estimation - Self-supervised Representation Learning for Deformable Objects<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/self-supervised-scene-flow-estimation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Self-supervised Scene Flow Estimation - Self-supervised Representation Learning for Deformable Objects\" \/>\n<meta property=\"og:description\" content=\"Method In this section, we will introduce the method we built for self-supervised scene flow estimation for deformable objects in detail. Our method is based upon the work Just Go With the Flow [1]. It is an extension from FlowNet3D [2] from supervised leanring to self-supervised learning, as shown in Figure 1. Just Go With &hellip; Continue reading &quot;Self-supervised Scene Flow Estimation&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/self-supervised-scene-flow-estimation\/\" \/>\n<meta property=\"og:site_name\" content=\"Self-supervised Representation Learning for Deformable Objects\" \/>\n<meta property=\"article:modified_time\" content=\"2020-12-23T03:45:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/image-9.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1621\" \/>\n\t<meta property=\"og:image:height\" content=\"605\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mscvprojects.ri.cmu.edu\\\/2020teamo\\\/self-supervised-scene-flow-estimation\\\/\",\"url\":\"https:\\\/\\\/mscvprojects.ri.cmu.edu\\\/2020teamo\\\/self-supervised-scene-flow-estimation\\\/\",\"name\":\"Self-supervised Scene Flow Estimation - Self-supervised Representation Learning for Deformable Objects\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mscvprojects.ri.cmu.edu\\\/2020teamo\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/mscvprojects.ri.cmu.edu\\\/2020teamo\\\/self-supervised-scene-flow-estimation\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/mscvprojects.ri.cmu.edu\\\/2020teamo\\\/self-supervised-scene-flow-estimation\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/mscvprojects.ri.cmu.edu\\\/2020teamo\\\/wp-content\\\/uploads\\\/sites\\\/45\\\/2020\\\/12\\\/image-9-1024x382.png\",\"datePublished\":\"2020-12-22T20:24:51+00:00\",\"dateModified\":\"2020-12-23T03:45:21+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mscvprojects.ri.cmu.edu\\\/2020teamo\\\/self-supervised-scene-flow-estimation\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/mscvprojects.ri.cmu.edu\\\/2020teamo\\\/self-supervised-scene-flow-estimation\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/mscvprojects.ri.cmu.edu\\\/2020teamo\\\/self-supervised-scene-flow-estimation\\\/#primaryimage\",\"url\":\"https:\\\/\\\/mscvprojects.ri.cmu.edu\\\/2020teamo\\\/wp-content\\\/uploads\\\/sites\\\/45\\\/2020\\\/12\\\/image-9.png\",\"contentUrl\":\"https:\\\/\\\/mscvprojects.ri.cmu.edu\\\/2020teamo\\\/wp-content\\\/uploads\\\/sites\\\/45\\\/2020\\\/12\\\/image-9.png\",\"width\":1621,\"height\":605},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mscvprojects.ri.cmu.edu\\\/2020teamo\\\/self-supervised-scene-flow-estimation\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mscvprojects.ri.cmu.edu\\\/2020teamo\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Self-supervised Scene Flow Estimation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mscvprojects.ri.cmu.edu\\\/2020teamo\\\/#website\",\"url\":\"https:\\\/\\\/mscvprojects.ri.cmu.edu\\\/2020teamo\\\/\",\"name\":\"Self-supervised Representation Learning for Deformable Objects\",\"description\":\"Ji Liu | Advisor: Prof. David Held\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/mscvprojects.ri.cmu.edu\\\/2020teamo\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Self-supervised Scene Flow Estimation - Self-supervised Representation Learning for Deformable Objects","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/self-supervised-scene-flow-estimation\/","og_locale":"en_US","og_type":"article","og_title":"Self-supervised Scene Flow Estimation - Self-supervised Representation Learning for Deformable Objects","og_description":"Method In this section, we will introduce the method we built for self-supervised scene flow estimation for deformable objects in detail. Our method is based upon the work Just Go With the Flow [1]. It is an extension from FlowNet3D [2] from supervised leanring to self-supervised learning, as shown in Figure 1. Just Go With &hellip; Continue reading \"Self-supervised Scene Flow Estimation\"","og_url":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/self-supervised-scene-flow-estimation\/","og_site_name":"Self-supervised Representation Learning for Deformable Objects","article_modified_time":"2020-12-23T03:45:21+00:00","og_image":[{"width":1621,"height":605,"url":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/image-9.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/self-supervised-scene-flow-estimation\/","url":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/self-supervised-scene-flow-estimation\/","name":"Self-supervised Scene Flow Estimation - Self-supervised Representation Learning for Deformable Objects","isPartOf":{"@id":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/#website"},"primaryImageOfPage":{"@id":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/self-supervised-scene-flow-estimation\/#primaryimage"},"image":{"@id":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/self-supervised-scene-flow-estimation\/#primaryimage"},"thumbnailUrl":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/image-9-1024x382.png","datePublished":"2020-12-22T20:24:51+00:00","dateModified":"2020-12-23T03:45:21+00:00","breadcrumb":{"@id":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/self-supervised-scene-flow-estimation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/self-supervised-scene-flow-estimation\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/self-supervised-scene-flow-estimation\/#primaryimage","url":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/image-9.png","contentUrl":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-content\/uploads\/sites\/45\/2020\/12\/image-9.png","width":1621,"height":605},{"@type":"BreadcrumbList","@id":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/self-supervised-scene-flow-estimation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/"},{"@type":"ListItem","position":2,"name":"Self-supervised Scene Flow Estimation"}]},{"@type":"WebSite","@id":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/#website","url":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/","name":"Self-supervised Representation Learning for Deformable Objects","description":"Ji Liu | Advisor: Prof. David Held","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-json\/wp\/v2\/pages\/111","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-json\/wp\/v2\/users\/97"}],"replies":[{"embeddable":true,"href":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-json\/wp\/v2\/comments?post=111"}],"version-history":[{"count":12,"href":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-json\/wp\/v2\/pages\/111\/revisions"}],"predecessor-version":[{"id":185,"href":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-json\/wp\/v2\/pages\/111\/revisions\/185"}],"wp:attachment":[{"href":"https:\/\/mscvprojects.ri.cmu.edu\/2020teamo\/wp-json\/wp\/v2\/media?parent=111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}