{"version":2,"relationshipURLBase":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html","relationshipResolution":"Resolve relative relationship URLs against relationshipURLBase; complete records and absolute URLs are in blocks.","title":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html","markdown":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.md","pages":[{"id":"reading-opening","title":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","unit":"怎样直接学习一张像素类别地图？","unitId":"pixel-prediction-objective","chapter":"II","number":1},{"id":"reading-block-d1a5e426d75643fcb95866b2042b4f18","title":"先预测采样结果，再判断指标名称","unit":"怎样直接学习一张像素类别地图？","unitId":"pixel-prediction-objective","chapter":"II","number":2},{"id":"reading-block-c9ffa01c285a40059ef2e6c94b9c23c7","title":"三类逐像素预测的可执行定义","unit":"怎样直接学习一张像素类别地图？","unitId":"pixel-prediction-objective","chapter":"II","number":3},{"id":"reading-block-db968106cfcc441d831de4d9217b92ba","title":"热身作为可回归检查","unit":"怎样直接学习一张像素类别地图？","unitId":"pixel-prediction-objective","chapter":"II","number":4},{"id":"reading-block-a83492c549764a6aad90a23cfb322167","title":"为什么同时训练 1×1 读出和 FCN","unit":"怎样直接学习一张像素类别地图？","unitId":"pixel-prediction-objective","chapter":"II","number":5},{"id":"reading-block-6b3780f4d85d41e5b17de37044b3ddd5","title":"参数更新和三个单条件比较","unit":"怎样直接学习一张像素类别地图？","unitId":"pixel-prediction-objective","chapter":"II","number":6},{"id":"reading-block-a27735d7ff6b479189f78046ff168f4a","title":"运行：模型输出必须和输入、真值一起看","unit":"怎样直接学习一张像素类别地图？","unitId":"pixel-prediction-objective","chapter":"II","number":7},{"id":"reading-block-16412ad68e504e8f9b564ed686a53b4c","title":"已完成结果：复杂模型没有被安排成赢家","unit":"怎样直接学习一张像素类别地图？","unitId":"pixel-prediction-objective","chapter":"II","number":8},{"id":"reading-block-365db128e760487bbb6de81c4068f3a7","title":"来源与结构输出的连接","unit":"怎样直接学习一张像素类别地图？","unitId":"pixel-prediction-objective","chapter":"II","number":9}],"aliases":[{"oldId":"b-971c4de54d9387b0addb40df","targetId":"b-971c4de54d9387b0addb40df","page":"reading-opening","operation":"move","beforeSHA256":"d0f364c951295a40328435deed6f80a661f8c12f9bb1cecd48bdcdaa19b25e35","afterSHA256":"d0f364c951295a40328435deed6f80a661f8c12f9bb1cecd48bdcdaa19b25e35","reason":"Same source body in authored semantic page"},{"oldId":"b-7b5379d7a87186dc199b9eba","targetId":"b-7b5379d7a87186dc199b9eba","page":"reading-opening","operation":"move","beforeSHA256":"e91f24e4e4ca40e2099a0d81d30db6568f4bf2074b499eeee6e3959617bd97ac","afterSHA256":"e91f24e4e4ca40e2099a0d81d30db6568f4bf2074b499eeee6e3959617bd97ac","reason":"Same source body in authored semantic page"},{"oldId":"b-573f6789a92a2cd93ff9a980","targetId":"b-573f6789a92a2cd93ff9a980","page":"reading-opening","operation":"move","beforeSHA256":"6f0b115c3c32032428a4c0d5ec4791e16d6b63aa3d643457bed758bf6af2b765","afterSHA256":"6f0b115c3c32032428a4c0d5ec4791e16d6b63aa3d643457bed758bf6af2b765","reason":"Same source body in authored semantic page"},{"oldId":"b-2cc493cf2c474b4af07d196b","targetId":"b-2cc493cf2c474b4af07d196b","page":"reading-opening","operation":"move","beforeSHA256":"f22152fd55dcdb0090b5653d37145694fd19388d31e10226549464fe8b483578","afterSHA256":"f22152fd55dcdb0090b5653d37145694fd19388d31e10226549464fe8b483578","reason":"Same source body in authored semantic page"},{"oldId":"b-dccdac79fb05c9e0a314de73","targetId":"b-dccdac79fb05c9e0a314de73","page":"reading-opening","operation":"move","beforeSHA256":"30ab9f304366670818536cf73c98c66aa814e8e31ecdbffcf19a4d6e7e7f22de","afterSHA256":"30ab9f304366670818536cf73c98c66aa814e8e31ecdbffcf19a4d6e7e7f22de","reason":"Same source body in authored semantic page"},{"oldId":"b-549d1a71a4efd0bd20990220","targetId":"b-549d1a71a4efd0bd20990220","page":"reading-opening","operation":"move","beforeSHA256":"5823a3278ca534f26e670bb4f054e1165f82204db49bba173023ab90729acdb8","afterSHA256":"5823a3278ca534f26e670bb4f054e1165f82204db49bba173023ab90729acdb8","reason":"Same source body in authored semantic page"},{"oldId":"b-f15af5159e3627b7272a65b3","targetId":"b-f15af5159e3627b7272a65b3","page":"reading-opening","operation":"move","beforeSHA256":"ef81ec397812888f35a4bc26d2ab2101a1203e199046886b77d0d44914385274","afterSHA256":"ef81ec397812888f35a4bc26d2ab2101a1203e199046886b77d0d44914385274","reason":"Same source body in authored semantic page"},{"oldId":"b-91bd7c167999daf379970b7b","targetId":"b-91bd7c167999daf379970b7b","page":"reading-opening","operation":"move","beforeSHA256":"5505a9739354ac5b75b872e5298e410972d8835c0baf320a0d2e403ea2255781","afterSHA256":"5505a9739354ac5b75b872e5298e410972d8835c0baf320a0d2e403ea2255781","reason":"Same source body in authored semantic page"},{"oldId":"b-d2e8989fdfb5ff036d42642f","targetId":"b-d2e8989fdfb5ff036d42642f","page":"reading-block-d1a5e426d75643fcb95866b2042b4f18","operation":"move","beforeSHA256":"5e5de37a286901ae99e730dcfd55ef7555bc75708621a2de2271f9ec46a48fc7","afterSHA256":"5e5de37a286901ae99e730dcfd55ef7555bc75708621a2de2271f9ec46a48fc7","reason":"Same source body in authored semantic page"},{"oldId":"b-f3046235ad687b4983cbb3ec","targetId":"b-f3046235ad687b4983cbb3ec","page":"reading-block-d1a5e426d75643fcb95866b2042b4f18","operation":"move","beforeSHA256":"3e79e6ee37bc2651602606740b6349a62a1d4e121af0d4849b58b3c20d43aadf","afterSHA256":"3e79e6ee37bc2651602606740b6349a62a1d4e121af0d4849b58b3c20d43aadf","reason":"Same source body in authored semantic page"},{"oldId":"b-3556d5bc4778af35a528838e","targetId":"b-3556d5bc4778af35a528838e","page":"reading-block-d1a5e426d75643fcb95866b2042b4f18","operation":"move","beforeSHA256":"e473b366baa2429f354f50c456cb6c5b42b683bd2e19bcd7f9188a205d7e10ce","afterSHA256":"e473b366baa2429f354f50c456cb6c5b42b683bd2e19bcd7f9188a205d7e10ce","reason":"Same source body in authored semantic page"},{"oldId":"b-d2cf6a52e242f50cd43d2430","targetId":"b-d2cf6a52e242f50cd43d2430","page":"reading-block-d1a5e426d75643fcb95866b2042b4f18","operation":"move","beforeSHA256":"e18a781a50c0cb125aa3eaa447621068cd99a2f03498a9f29c96561b27e06a4b","afterSHA256":"e18a781a50c0cb125aa3eaa447621068cd99a2f03498a9f29c96561b27e06a4b","reason":"Same source body in authored semantic page"},{"oldId":"b-387b2d7365d8016c8b175ebd","targetId":"b-387b2d7365d8016c8b175ebd","page":"reading-block-d1a5e426d75643fcb95866b2042b4f18","operation":"move","beforeSHA256":"bad2300d993a83e0bd2f5f97d8bebdf04b9365e535f41eed4cdd34f598052b42","afterSHA256":"bad2300d993a83e0bd2f5f97d8bebdf04b9365e535f41eed4cdd34f598052b42","reason":"Same source body in authored semantic page"},{"oldId":"b-60bab725f0b1061fbb95ba9f","targetId":"b-60bab725f0b1061fbb95ba9f","page":"reading-block-d1a5e426d75643fcb95866b2042b4f18","operation":"move","beforeSHA256":"3098d3eb8f780b33c1762433ec3a9ada3dfc16c7c7b446357e70e645c768b17f","afterSHA256":"3098d3eb8f780b33c1762433ec3a9ada3dfc16c7c7b446357e70e645c768b17f","reason":"Same source body in authored semantic page"},{"oldId":"b-0bc7b4f1c6358fcbbad7046d","targetId":"b-0bc7b4f1c6358fcbbad7046d","page":"reading-block-c9ffa01c285a40059ef2e6c94b9c23c7","operation":"move","beforeSHA256":"050004b629ad89d2c6c775c4f355922231ede1e9f7f7c5c0d17cbb481f3f7b84","afterSHA256":"050004b629ad89d2c6c775c4f355922231ede1e9f7f7c5c0d17cbb481f3f7b84","reason":"Same source body in authored semantic page"},{"oldId":"b-3e16bc2e4975d1abb02b8cb5","targetId":"b-3e16bc2e4975d1abb02b8cb5","page":"reading-block-c9ffa01c285a40059ef2e6c94b9c23c7","operation":"move","beforeSHA256":"6eb5878e81f00bb14859a90ffdffc156adb43bf1bfcc64a22f94ff501383643e","afterSHA256":"6eb5878e81f00bb14859a90ffdffc156adb43bf1bfcc64a22f94ff501383643e","reason":"Same source body in authored semantic page"},{"oldId":"b-6e77340e91b3619e27216529","targetId":"b-6e77340e91b3619e27216529","page":"reading-block-c9ffa01c285a40059ef2e6c94b9c23c7","operation":"move","beforeSHA256":"70ad296a393605e878086a8e23b9d7c9e2a33445b81125777b77304dbbc615cb","afterSHA256":"70ad296a393605e878086a8e23b9d7c9e2a33445b81125777b77304dbbc615cb","reason":"Same source body in authored semantic page"},{"oldId":"b-94f9b4cd08cb1fbed3e7f37c","targetId":"b-94f9b4cd08cb1fbed3e7f37c","page":"reading-block-c9ffa01c285a40059ef2e6c94b9c23c7","operation":"move","beforeSHA256":"e006bafcb2625b98d6083536703cdad4e89363e8ae0da401f01b30f9c071b135","afterSHA256":"e006bafcb2625b98d6083536703cdad4e89363e8ae0da401f01b30f9c071b135","reason":"Same source body in authored semantic page"},{"oldId":"b-5c273aa319ff24f9a2a4a84a","targetId":"b-5c273aa319ff24f9a2a4a84a","page":"reading-block-c9ffa01c285a40059ef2e6c94b9c23c7","operation":"move","beforeSHA256":"e64d051480b4b1cf6eb274e004d842c611e788263325a81de2897d635d096447","afterSHA256":"e64d051480b4b1cf6eb274e004d842c611e788263325a81de2897d635d096447","reason":"Same source body in authored semantic page"},{"oldId":"b-4c6cacc8516fa1d94d1538eb","targetId":"b-4c6cacc8516fa1d94d1538eb","page":"reading-block-db968106cfcc441d831de4d9217b92ba","operation":"move","beforeSHA256":"c62954bcbce1bcf6e8cce3997a9fa9bbadc5e4479ac51d460366507d6fb649f5","afterSHA256":"c62954bcbce1bcf6e8cce3997a9fa9bbadc5e4479ac51d460366507d6fb649f5","reason":"Same source body in authored semantic page"},{"oldId":"b-0e02b9cfbf5201dfe95c53dc","targetId":"b-0e02b9cfbf5201dfe95c53dc","page":"reading-block-db968106cfcc441d831de4d9217b92ba","operation":"move","beforeSHA256":"58324c57b0a0635e3e4d7be651d9a8620cc66fa641471465334d09544bd2379c","afterSHA256":"58324c57b0a0635e3e4d7be651d9a8620cc66fa641471465334d09544bd2379c","reason":"Same source body in authored semantic page"},{"oldId":"b-4e07b31d184237b0ecb3dd36","targetId":"b-4e07b31d184237b0ecb3dd36","page":"reading-block-a83492c549764a6aad90a23cfb322167","operation":"move","beforeSHA256":"d47e56d245656ae887c7eb760e578713ac36b028b1761e7a1cdc24c593cc57b1","afterSHA256":"d47e56d245656ae887c7eb760e578713ac36b028b1761e7a1cdc24c593cc57b1","reason":"Same source body in authored semantic page"},{"oldId":"b-c51c6a79aa762b7f79ca6612","targetId":"b-c51c6a79aa762b7f79ca6612","page":"reading-block-a83492c549764a6aad90a23cfb322167","operation":"move","beforeSHA256":"7d5a1add654bd29f2bf8645c182e7b93815814ebedcfc5d3f9c65a7686918d4c","afterSHA256":"7d5a1add654bd29f2bf8645c182e7b93815814ebedcfc5d3f9c65a7686918d4c","reason":"Same source body in authored semantic page"},{"oldId":"b-07a6fee3c3460c5211074bb9","targetId":"b-07a6fee3c3460c5211074bb9","page":"reading-block-a83492c549764a6aad90a23cfb322167","operation":"move","beforeSHA256":"2c69e23b066df28a6a6aba3050f0068b12c0749c5772e39e19e4960b4ba27ba0","afterSHA256":"2c69e23b066df28a6a6aba3050f0068b12c0749c5772e39e19e4960b4ba27ba0","reason":"Same source body in authored semantic page"},{"oldId":"b-9c6aa1d4f554fbf96410b83e","targetId":"b-9c6aa1d4f554fbf96410b83e","page":"reading-block-a83492c549764a6aad90a23cfb322167","operation":"move","beforeSHA256":"fe711ade7476462f1282523a3800320717ac116f9f5f229c3faab01f52220735","afterSHA256":"fe711ade7476462f1282523a3800320717ac116f9f5f229c3faab01f52220735","reason":"Same source body in authored semantic page"},{"oldId":"b-952c7e058027c5348ab37248","targetId":"b-952c7e058027c5348ab37248","page":"reading-block-a83492c549764a6aad90a23cfb322167","operation":"move","beforeSHA256":"35b26bb8eeec03243eb73037e44d9ec58aff583454c17a469db37c5b6bc94c1b","afterSHA256":"35b26bb8eeec03243eb73037e44d9ec58aff583454c17a469db37c5b6bc94c1b","reason":"Same source body in authored semantic page"},{"oldId":"b-b4d6e61570317196f0e7cf1f","targetId":"b-b4d6e61570317196f0e7cf1f","page":"reading-block-6b3780f4d85d41e5b17de37044b3ddd5","operation":"move","beforeSHA256":"fad19dd655cbff5dd4998b491fc256cf4262c5855f1b64770a7151b785bd452c","afterSHA256":"fad19dd655cbff5dd4998b491fc256cf4262c5855f1b64770a7151b785bd452c","reason":"Same source body in authored semantic page"},{"oldId":"b-25b6566dff24075424d85c13","targetId":"b-25b6566dff24075424d85c13","page":"reading-block-6b3780f4d85d41e5b17de37044b3ddd5","operation":"move","beforeSHA256":"f35c020a79c857fb22b37d09d238ef0a9297a6e453bfbd6d87e40564491e7fb4","afterSHA256":"f35c020a79c857fb22b37d09d238ef0a9297a6e453bfbd6d87e40564491e7fb4","reason":"Same source body in authored semantic page"},{"oldId":"b-62f2c7ab1e9e030831331323","targetId":"b-62f2c7ab1e9e030831331323","page":"reading-block-6b3780f4d85d41e5b17de37044b3ddd5","operation":"move","beforeSHA256":"fac3a75cb04573f3d757a2689cc26291f626146b58cdb675411872553a11cbff","afterSHA256":"fac3a75cb04573f3d757a2689cc26291f626146b58cdb675411872553a11cbff","reason":"Same source body in authored semantic page"},{"oldId":"b-92fea66d975a7ef25bb4ddbf","targetId":"b-92fea66d975a7ef25bb4ddbf","page":"reading-block-6b3780f4d85d41e5b17de37044b3ddd5","operation":"move","beforeSHA256":"9280d9f051fba81f9736060d652c337abb09125136855ddeff5476d73d4ad9c5","afterSHA256":"9280d9f051fba81f9736060d652c337abb09125136855ddeff5476d73d4ad9c5","reason":"Same source body in authored semantic page"},{"oldId":"b-a683786ba4fe9fc758a424f9","targetId":"b-a683786ba4fe9fc758a424f9","page":"reading-block-6b3780f4d85d41e5b17de37044b3ddd5","operation":"move","beforeSHA256":"cbf83d8e6014f82b705eda9f4ac45b1f5aa1fc34316744b66ad8e4d20f7d7705","afterSHA256":"cbf83d8e6014f82b705eda9f4ac45b1f5aa1fc34316744b66ad8e4d20f7d7705","reason":"Same source body in authored semantic page"},{"oldId":"b-08383254584ba0066d9291e3","targetId":"b-08383254584ba0066d9291e3","page":"reading-block-a27735d7ff6b479189f78046ff168f4a","operation":"move","beforeSHA256":"7a697344de10e39e20ad3b1fcd35122b445daf2de6b7e61f710c02f563ad9ea5","afterSHA256":"7a697344de10e39e20ad3b1fcd35122b445daf2de6b7e61f710c02f563ad9ea5","reason":"Same source body in authored semantic page"},{"oldId":"b-9839180e3095785d5e507a49","targetId":"b-9839180e3095785d5e507a49","page":"reading-block-a27735d7ff6b479189f78046ff168f4a","operation":"move","beforeSHA256":"3c9ce11d7745a44e9bb8e0cf4f4b05457d16b2291abb52e821e33b5a1b1cbd78","afterSHA256":"3c9ce11d7745a44e9bb8e0cf4f4b05457d16b2291abb52e821e33b5a1b1cbd78","reason":"Same source body in authored semantic page"},{"oldId":"b-58958dea87a464fec08161e4","targetId":"b-58958dea87a464fec08161e4","page":"reading-block-a27735d7ff6b479189f78046ff168f4a","operation":"move","beforeSHA256":"511f953428fc36f69fb5ac6a0e012f4337791cd5195b05446ab91ccb7a45db98","afterSHA256":"511f953428fc36f69fb5ac6a0e012f4337791cd5195b05446ab91ccb7a45db98","reason":"Same source body in authored semantic page"},{"oldId":"b-dffa3ed1f697cfcf9b14bef3","targetId":"b-dffa3ed1f697cfcf9b14bef3","page":"reading-block-16412ad68e504e8f9b564ed686a53b4c","operation":"move","beforeSHA256":"16424645f3255bd542eaba92027ec7ebc3e44924856df20f0677d9042a3a9af4","afterSHA256":"16424645f3255bd542eaba92027ec7ebc3e44924856df20f0677d9042a3a9af4","reason":"Same source body in authored semantic page"},{"oldId":"b-e60a420c4bd5de51186234ca","targetId":"b-e60a420c4bd5de51186234ca","page":"reading-block-16412ad68e504e8f9b564ed686a53b4c","operation":"move","beforeSHA256":"03a19cae81d2ff11ebeebadbfcc0fe5635e45af05769809a745eaab573b92218","afterSHA256":"03a19cae81d2ff11ebeebadbfcc0fe5635e45af05769809a745eaab573b92218","reason":"Same source body in authored semantic page"},{"oldId":"b-2ad25ecb41654c8807417749","targetId":"b-2ad25ecb41654c8807417749","page":"reading-block-16412ad68e504e8f9b564ed686a53b4c","operation":"rewrite","beforeSHA256":"0476bb05277a04c23e4c8b6ce52d39f57fa7c289952f4eb13dfa979376725eae","afterSHA256":"c1b378d36ab88faa10dd2f0b6326a5e65b6738a79d88081bf4be163e38fec080","reason":"Same source identity with figure semantics or reading context enriched"},{"oldId":"b-5f783da5d8bc88aa957268a5","targetId":"b-5f783da5d8bc88aa957268a5","page":"reading-block-16412ad68e504e8f9b564ed686a53b4c","operation":"move","beforeSHA256":"101e0c7e5c59f819cddc0f9d349f0e531473f5f092cf9b4dff94298693faa83f","afterSHA256":"101e0c7e5c59f819cddc0f9d349f0e531473f5f092cf9b4dff94298693faa83f","reason":"Same source body in authored semantic page"},{"oldId":"b-2f4a8ca4af2afafcfe7e51b2","targetId":"b-2f4a8ca4af2afafcfe7e51b2","page":"reading-block-16412ad68e504e8f9b564ed686a53b4c","operation":"move","beforeSHA256":"e465cfb291fd252309d7f2181ce240583761f7b6d30f4234070d6fb5e87896ff","afterSHA256":"805f9aef538f2fbdbb2a98574452c74ecb9fae28fbe7bff0adbce451952c0d01","reason":"Same source body in authored semantic page"},{"oldId":"b-38dd2347ed9de6d3efeb667b","targetId":"b-38dd2347ed9de6d3efeb667b","page":"reading-block-16412ad68e504e8f9b564ed686a53b4c","operation":"move","beforeSHA256":"f51eac1aae8965802b84880530a9270d8c3e3751e42dbde5940e8d401b8c16f2","afterSHA256":"cab5afe03f707fb5bbca4cddf8778f536cfb8d6b9adca57c29a5107c47636a95","reason":"Same source body in authored semantic page"},{"oldId":"b-ef22cb41beac6039ae1f8b0f","targetId":"b-ef22cb41beac6039ae1f8b0f","page":"reading-block-16412ad68e504e8f9b564ed686a53b4c","operation":"move","beforeSHA256":"26ff18341d4fa15f7e4403a265645c5904a90634a1aaa35f64c7506e131fb06d","afterSHA256":"26ff18341d4fa15f7e4403a265645c5904a90634a1aaa35f64c7506e131fb06d","reason":"Same source body in authored semantic page"},{"oldId":"b-22cc4932bbd5abc49518f849","targetId":"b-22cc4932bbd5abc49518f849","page":"reading-block-16412ad68e504e8f9b564ed686a53b4c","operation":"move","beforeSHA256":"334be2c197ec023e6708646506157991473e880d4347d6e99d48afd83448f2f9","afterSHA256":"cdaa1a9b8ed2f648a296b64726de36de5bb79d8decf910109b5bb708b8966142","reason":"Same source body in authored semantic page"},{"oldId":"b-e2123c4f4809a1a7db16c6f7","targetId":"b-e2123c4f4809a1a7db16c6f7","page":"reading-block-16412ad68e504e8f9b564ed686a53b4c","operation":"move","beforeSHA256":"9412c9cf2be0c73ea8850a70b998b42219a9f8baf916c61ba9a7c9d760da4526","afterSHA256":"9412c9cf2be0c73ea8850a70b998b42219a9f8baf916c61ba9a7c9d760da4526","reason":"Same source body in authored semantic page"},{"oldId":"b-4f46516b8a37deaa768a9cc6","targetId":"b-4f46516b8a37deaa768a9cc6","page":"reading-block-16412ad68e504e8f9b564ed686a53b4c","operation":"move","beforeSHA256":"cb5121b7a60ed7a947e6ba295f10c4ff937fcc81522c6c76df945b092efc2ba7","afterSHA256":"cef1fd6369aabb1d23e9ec0152605ca225c6913875d83c223eae49ad8214d1d2","reason":"Same source body in authored semantic page"},{"oldId":"b-0c0a6e8cca51cb76af9bc5c7","targetId":"b-0c0a6e8cca51cb76af9bc5c7","page":"reading-block-16412ad68e504e8f9b564ed686a53b4c","operation":"move","beforeSHA256":"872af66a9cbfc66762f9bf89802b01cd9d1317d99427da3c4957ed638521532a","afterSHA256":"872af66a9cbfc66762f9bf89802b01cd9d1317d99427da3c4957ed638521532a","reason":"Same source body in authored semantic page"},{"oldId":"b-7e60f118b29b2cca5daf9d05","targetId":"b-7e60f118b29b2cca5daf9d05","page":"reading-block-365db128e760487bbb6de81c4068f3a7","operation":"move","beforeSHA256":"96b5617dd1b75d91c269215ecedcbf9a577b0f5f72047a0da9474c2f4901f298","afterSHA256":"96b5617dd1b75d91c269215ecedcbf9a577b0f5f72047a0da9474c2f4901f298","reason":"Same source body in authored semantic page"},{"oldId":"b-017aa63e72565d4144de92c2","targetId":"b-017aa63e72565d4144de92c2","page":"reading-block-365db128e760487bbb6de81c4068f3a7","operation":"move","beforeSHA256":"704681ab580f1aba8abf702f224a6393f184b62c6bc8c2aebd06660b7039e0a8","afterSHA256":"704681ab580f1aba8abf702f224a6393f184b62c6bc8c2aebd06660b7039e0a8","reason":"Same source body in authored semantic page"},{"oldId":"b-912381ba1b63c7aa88cab4f6","targetId":"b-912381ba1b63c7aa88cab4f6","page":"reading-block-365db128e760487bbb6de81c4068f3a7","operation":"move","beforeSHA256":"986aeb0d9133f40c4ba6c833a309426dce10edbd3c280d3d5f7969b14e818b23","afterSHA256":"986aeb0d9133f40c4ba6c833a309426dce10edbd3c280d3d5f7969b14e818b23","reason":"Same source body in authored semantic page"},{"oldId":"block-d1a5e426d75643fcb95866b2042b4f18--先预测采样结果再判断指标名称","targetId":"b-d2e8989fdfb5ff036d42642f","operation":"retain-source-identity"},{"oldId":"block-c9ffa01c285a40059ef2e6c94b9c23c7--三类逐像素预测的可执行定义","targetId":"b-0bc7b4f1c6358fcbbad7046d","operation":"retain-source-identity"},{"oldId":"block-db968106cfcc441d831de4d9217b92ba--热身作为可回归检查","targetId":"b-4c6cacc8516fa1d94d1538eb","operation":"retain-source-identity"},{"oldId":"block-a83492c549764a6aad90a23cfb322167--为什么同时训练-11-读出和-fcn","targetId":"b-4e07b31d184237b0ecb3dd36","operation":"retain-source-identity"},{"oldId":"block-6b3780f4d85d41e5b17de37044b3ddd5--参数更新和三个单条件比较","targetId":"b-b4d6e61570317196f0e7cf1f","operation":"retain-source-identity"},{"oldId":"block-a27735d7ff6b479189f78046ff168f4a--运行模型输出必须和输入真值一起看","targetId":"b-08383254584ba0066d9291e3","operation":"retain-source-identity"},{"oldId":"block-16412ad68e504e8f9b564ed686a53b4c--已完成结果复杂模型没有被安排成赢家","targetId":"b-dffa3ed1f697cfcf9b14bef3","operation":"retain-source-identity"},{"oldId":"block-365db128e760487bbb6de81c4068f3a7--来源与结构输出的连接","targetId":"b-7e60f118b29b2cca5daf9d05","operation":"retain-source-identity"}],"blocks":[{"id":"b-971c4de54d9387b0addb40df","type":"h1","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-971c4de54d9387b0addb40df","content":"# LAB 11 · 从 RGB 到像素：读出、FCN 与边界","sha256":"d0f364c951295a40328435deed6f80a661f8c12f9bb1cecd48bdcdaa19b25e35","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-opening","title":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","number":1},"sectionTitle":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","currentQuestion":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-7b5379d7a87186dc199b9eba","prerequisites":[{"id":"b-7b5379d7a87186dc199b9eba","url":"#b-7b5379d7a87186dc199b9eba","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-7b5379d7a87186dc199b9eba","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-7b5379d7a87186dc199b9eba","content":"按问题继续","sha256":"e91f24e4e4ca40e2099a0d81d30db6568f4bf2074b499eeee6e3959617bd97ac","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-opening","title":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","number":1},"sectionTitle":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","currentQuestion":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-971c4de54d9387b0addb40df","nextBlock":"b-573f6789a92a2cd93ff9a980","prerequisites":[{"id":"b-971c4de54d9387b0addb40df","url":"#b-971c4de54d9387b0addb40df","role":"section-title"}],"relatedBlocks":[]},{"id":"b-573f6789a92a2cd93ff9a980","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-573f6789a92a2cd93ff9a980","content":"前景/背景/mIoU口径、RGB到mask训练、FCN与1×1读出及边界","sha256":"6f0b115c3c32032428a4c0d5ec4791e16d6b63aa3d643457bed758bf6af2b765","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-opening","title":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","number":1},"sectionTitle":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","currentQuestion":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-7b5379d7a87186dc199b9eba","nextBlock":"b-2cc493cf2c474b4af07d196b","prerequisites":[{"id":"b-971c4de54d9387b0addb40df","url":"#b-971c4de54d9387b0addb40df","role":"section-title"},{"id":"b-7b5379d7a87186dc199b9eba","url":"#b-7b5379d7a87186dc199b9eba","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-2cc493cf2c474b4af07d196b","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-2cc493cf2c474b4af07d196b","content":"可先阅读已有结果，再决定是否运行。重算时请核对各节记录的数据、参数、环境与日期。","sha256":"f22152fd55dcdb0090b5653d37145694fd19388d31e10226549464fe8b483578","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-opening","title":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","number":1},"sectionTitle":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","currentQuestion":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-573f6789a92a2cd93ff9a980","nextBlock":"b-dccdac79fb05c9e0a314de73","prerequisites":[{"id":"b-971c4de54d9387b0addb40df","url":"#b-971c4de54d9387b0addb40df","role":"section-title"},{"id":"b-7b5379d7a87186dc199b9eba","url":"#b-7b5379d7a87186dc199b9eba","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-dccdac79fb05c9e0a314de73","type":"p","scope":"block-f47f5c4b80a34f958790cac821d40ec9","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-dccdac79fb05c9e0a314de73","content":"**学习路径：** [像素、边界与对象身份](/course/study/pixels-instances.html)","sha256":"30ab9f304366670818536cf73c98c66aa814e8e31ecdbffcf19a4d6e7e7f22de","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-opening","title":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","number":1},"sectionTitle":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","currentQuestion":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-2cc493cf2c474b4af07d196b","nextBlock":"b-549d1a71a4efd0bd20990220","prerequisites":[{"id":"b-971c4de54d9387b0addb40df","url":"#b-971c4de54d9387b0addb40df","role":"section-title"},{"id":"b-7b5379d7a87186dc199b9eba","url":"#b-7b5379d7a87186dc199b9eba","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-549d1a71a4efd0bd20990220","type":"p","scope":"block-f47f5c4b80a34f958790cac821d40ec9","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-549d1a71a4efd0bd20990220","content":"一张框正确的图，仍未说明椭圆边缘和两物体间的背景缝。本册对应 [P36–38](/course/pages/l3-r2-p36.html)，训练 RGB→三类像素输出，并比较逐像素线性读出和小型 FCN；它没有训练实例身份。","sha256":"5823a3278ca534f26e670bb4f054e1165f82204db49bba173023ab90729acdb8","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-opening","title":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","number":1},"sectionTitle":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","currentQuestion":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-dccdac79fb05c9e0a314de73","nextBlock":"b-f15af5159e3627b7272a65b3","prerequisites":[{"id":"b-971c4de54d9387b0addb40df","url":"#b-971c4de54d9387b0addb40df","role":"section-title"},{"id":"b-7b5379d7a87186dc199b9eba","url":"#b-7b5379d7a87186dc199b9eba","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-f15af5159e3627b7272a65b3","type":"p","scope":"block-f47f5c4b80a34f958790cac821d40ec9","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-f15af5159e3627b7272a65b3","content":"先读 [两种模型的已有对照](/course/blocks/pixel-model-positive-result.html)：RGB 基线在原合成分布满分，模糊后 FCN 更稳健。再追踪输入、目标、粗细分支和混淆矩阵。前面的已知 mask 降采样只是采样热身，其 [指标算例](/course/blocks/mask-iou-worked-example.html) 与看图预测须分别解释。","sha256":"ef81ec397812888f35a4bc26d2ab2101a1203e199046886b77d0d44914385274","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-opening","title":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","number":1},"sectionTitle":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","currentQuestion":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-549d1a71a4efd0bd20990220","nextBlock":"b-91bd7c167999daf379970b7b","prerequisites":[{"id":"b-971c4de54d9387b0addb40df","url":"#b-971c4de54d9387b0addb40df","role":"section-title"},{"id":"b-7b5379d7a87186dc199b9eba","url":"#b-7b5379d7a87186dc199b9eba","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-91bd7c167999daf379970b7b","type":"p","scope":"block-f47f5c4b80a34f958790cac821d40ec9","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-91bd7c167999daf379970b7b","content":"产出一段具体判断：RGB 颜色何时已经够用，什么干预才显示邻域的作用？需要公式查 [CLS 08](https://deepnote.com/project/38755e4e-23f6-4f5f-8c68-8a2e4114b1c1/notebook/2d81e2a1936043349eacb71c53c0defa)；需要采样短练习去 [LAB 03](https://deepnote.com/project/38755e4e-23f6-4f5f-8c68-8a2e4114b1c1/notebook/49a2c030eafa4e1db6fc4f1a08c3810a)。复跑按脚本创建/追加的顺序执行，另存 `lab11-results-rerun`；也可只读已有结果完成比较。","sha256":"5505a9739354ac5b75b872e5298e410972d8835c0baf320a0d2e403ea2255781","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-opening","title":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","number":1},"sectionTitle":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","currentQuestion":"LAB 11 · 从 RGB 到像素：读出、FCN 与边界","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-f15af5159e3627b7272a65b3","nextBlock":null,"prerequisites":[{"id":"b-971c4de54d9387b0addb40df","url":"#b-971c4de54d9387b0addb40df","role":"section-title"},{"id":"b-7b5379d7a87186dc199b9eba","url":"#b-7b5379d7a87186dc199b9eba","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-d2e8989fdfb5ff036d42642f","type":"h2","scope":"block-d1a5e426d75643fcb95866b2042b4f18","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-d2e8989fdfb5ff036d42642f","content":"## 先预测采样结果，再判断指标名称","sha256":"5e5de37a286901ae99e730dcfd55ef7555bc75708621a2de2271f9ec46a48fc7","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-d1a5e426d75643fcb95866b2042b4f18","title":"先预测采样结果，再判断指标名称","number":2},"sectionTitle":"先预测采样结果，再判断指标名称","currentQuestion":"先预测采样结果，再判断指标名称","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-f3046235ad687b4983cbb3ec","prerequisites":[{"id":"b-f3046235ad687b4983cbb3ec","url":"#b-f3046235ad687b4983cbb3ec","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-f3046235ad687b4983cbb3ec","type":"p","scope":"block-d1a5e426d75643fcb95866b2042b4f18","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-f3046235ad687b4983cbb3ec","content":"8×8 真值有 16 个前景、48 个背景。每个 2×2 小块求平均得到 4×4 覆盖率；最近邻扩大回 8×8，再以 ≥.5 二值化，会把半覆盖小块全部判前景，因此预测前景有 24 个像素。前景交集 16、并集 24，$IoU_{fg}=2/3$；背景交集 40、并集 48，$IoU_{bg}=5/6$。两类平均为 .75，8 个像素错，准确率为 .875。","sha256":"3e79e6ee37bc2651602606740b6349a62a1d4e121af0d4849b58b3c20d43aadf","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-d1a5e426d75643fcb95866b2042b4f18","title":"先预测采样结果，再判断指标名称","number":2},"sectionTitle":"先预测采样结果，再判断指标名称","currentQuestion":"先预测采样结果，再判断指标名称","sourceSlides":[],"knowledgeBlock":null,"formulas":[{"latex":"IoU_{fg}=2/3","definitionContext":"先预测采样结果，再判断指标名称"},{"latex":"IoU_{bg}=5/6","definitionContext":"先预测采样结果，再判断指标名称"}],"previousBlock":"b-d2e8989fdfb5ff036d42642f","nextBlock":"b-3556d5bc4778af35a528838e","prerequisites":[{"id":"b-d2e8989fdfb5ff036d42642f","url":"#b-d2e8989fdfb5ff036d42642f","role":"section-title"}],"relatedBlocks":[]},{"id":"b-3556d5bc4778af35a528838e","type":"p","scope":"block-d1a5e426d75643fcb95866b2042b4f18","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-3556d5bc4778af35a528838e","content":"双线性插值在四个邻近覆盖率之间加权，`align_corners=False` 明确规定坐标对应。它不凭空恢复原边界。本例阈值仍为 .5：双线性只有 6 个错误像素，像素准确率 .90625，却仍然得到前景 IoU=2/3；误差位置、前景集合大小变化会使不同指标给出不同读数。它的背景 IoU=.88462，两类 mIoU=.77564。不能把“更平滑”直接改写成“知道了真实轮廓”。","sha256":"e473b366baa2429f354f50c456cb6c5b42b683bd2e19bcd7f9188a205d7e10ce","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-d1a5e426d75643fcb95866b2042b4f18","title":"先预测采样结果，再判断指标名称","number":2},"sectionTitle":"先预测采样结果，再判断指标名称","currentQuestion":"先预测采样结果，再判断指标名称","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-f3046235ad687b4983cbb3ec","nextBlock":"b-d2cf6a52e242f50cd43d2430","prerequisites":[{"id":"b-d2e8989fdfb5ff036d42642f","url":"#b-d2e8989fdfb5ff036d42642f","role":"section-title"},{"id":"b-f3046235ad687b4983cbb3ec","url":"#b-f3046235ad687b4983cbb3ec","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-d2cf6a52e242f50cd43d2430","type":"p","scope":"block-d1a5e426d75643fcb95866b2042b4f18","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-d2cf6a52e242f50cd43d2430","content":"对 RGB 或 logits 的双线性插值可以混合实值。对类别 mask，编号 1、2 不是数轴上可平均的强度：几何变换应采用最近邻保持离散标签；ignore=255 也必须保持身份。下面的训练增强只水平翻转，对图像和 mask 执行同一个随机选择。","sha256":"e18a781a50c0cb125aa3eaa447621068cd99a2f03498a9f29c96561b27e06a4b","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-d1a5e426d75643fcb95866b2042b4f18","title":"先预测采样结果，再判断指标名称","number":2},"sectionTitle":"先预测采样结果，再判断指标名称","currentQuestion":"先预测采样结果，再判断指标名称","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-3556d5bc4778af35a528838e","nextBlock":"b-387b2d7365d8016c8b175ebd","prerequisites":[{"id":"b-d2e8989fdfb5ff036d42642f","url":"#b-d2e8989fdfb5ff036d42642f","role":"section-title"},{"id":"b-f3046235ad687b4983cbb3ec","url":"#b-f3046235ad687b4983cbb3ec","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-387b2d7365d8016c8b175ebd","type":"pre","scope":"block-2240f73632414eacbe7d39922342aee0","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-387b2d7365d8016c8b175ebd","content":"```\nimport os, tempfile\nfrom pathlib import Path\n# Isolated ephemeral workspace supports detached runs with readonly project storage.\nSPATIAL_RUN_DIR = Path(tempfile.mkdtemp(prefix='lecture03-'))\nos.chdir(SPATIAL_RUN_DIR)\nprint('Ephemeral experiment directory:', SPATIAL_RUN_DIR)\n```","sha256":"bad2300d993a83e0bd2f5f97d8bebdf04b9365e535f41eed4cdd34f598052b42","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-d1a5e426d75643fcb95866b2042b4f18","title":"先预测采样结果，再判断指标名称","number":2},"sectionTitle":"先预测采样结果，再判断指标名称","currentQuestion":"先预测采样结果，再判断指标名称","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-d2cf6a52e242f50cd43d2430","nextBlock":"b-60bab725f0b1061fbb95ba9f","prerequisites":[{"id":"b-d2e8989fdfb5ff036d42642f","url":"#b-d2e8989fdfb5ff036d42642f","role":"section-title"},{"id":"b-f3046235ad687b4983cbb3ec","url":"#b-f3046235ad687b4983cbb3ec","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-60bab725f0b1061fbb95ba9f","type":"pre","scope":"block-69c46b79dec64732aba46f41c673c245","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-60bab725f0b1061fbb95ba9f","content":"```\nimport importlib.util, subprocess, sys\nfrom pathlib import Path\n# The only download, if needed, is open-source Python packages, not model weights.\nif importlib.util.find_spec('torch') is None:\n    subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'torch', '--index-url', 'https://download.pytorch.org/whl/cpu'])\nmissing=[p for p in ['numpy','matplotlib'] if importlib.util.find_spec(p) is None]\nif missing: subprocess.check_call([sys.executable,'-m','pip','install',*missing])\nimport torch, numpy as np\nprint('Python',sys.version.split()[0], 'torch',torch.__version__, 'numpy',np.__version__, 'device: CPU')\n```","sha256":"3098d3eb8f780b33c1762433ec3a9ada3dfc16c7c7b446357e70e645c768b17f","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-d1a5e426d75643fcb95866b2042b4f18","title":"先预测采样结果，再判断指标名称","number":2},"sectionTitle":"先预测采样结果，再判断指标名称","currentQuestion":"先预测采样结果，再判断指标名称","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-387b2d7365d8016c8b175ebd","nextBlock":null,"prerequisites":[{"id":"b-d2e8989fdfb5ff036d42642f","url":"#b-d2e8989fdfb5ff036d42642f","role":"section-title"},{"id":"b-f3046235ad687b4983cbb3ec","url":"#b-f3046235ad687b4983cbb3ec","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-0bc7b4f1c6358fcbbad7046d","type":"h2","scope":"block-c9ffa01c285a40059ef2e6c94b9c23c7","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-0bc7b4f1c6358fcbbad7046d","content":"## 三类逐像素预测的可执行定义","sha256":"050004b629ad89d2c6c775c4f355922231ede1e9f7f7c5c0d17cbb481f3f7b84","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-c9ffa01c285a40059ef2e6c94b9c23c7","title":"三类逐像素预测的可执行定义","number":3},"sectionTitle":"三类逐像素预测的可执行定义","currentQuestion":"三类逐像素预测的可执行定义","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-3e16bc2e4975d1abb02b8cb5","prerequisites":[{"id":"b-3e16bc2e4975d1abb02b8cb5","url":"#b-3e16bc2e4975d1abb02b8cb5","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-3e16bc2e4975d1abb02b8cb5","type":"p","scope":"block-c9ffa01c285a40059ef2e6c94b9c23c7","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-3e16bc2e4975d1abb02b8cb5","content":"生成图像为 `[B,3,48,48]`，真值为 `int64 [B,48,48]`，logits 为 `[B,3,48,48]`。通道 0/1/2 分别是背景/红色矩形/蓝色椭圆。384 张训练图与 128 张保留图使用原始场景种子 7101 和 7901；没有把同图的翻转分到两侧。对象数、位置、尺寸和亮度变化，含空图与多对象图。","sha256":"6eb5878e81f00bb14859a90ffdffc156adb43bf1bfcc64a22f94ff501383643e","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-c9ffa01c285a40059ef2e6c94b9c23c7","title":"三类逐像素预测的可执行定义","number":3},"sectionTitle":"三类逐像素预测的可执行定义","currentQuestion":"三类逐像素预测的可执行定义","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-0bc7b4f1c6358fcbbad7046d","nextBlock":"b-6e77340e91b3619e27216529","prerequisites":[{"id":"b-0bc7b4f1c6358fcbbad7046d","url":"#b-0bc7b4f1c6358fcbbad7046d","role":"section-title"}],"relatedBlocks":[]},{"id":"b-6e77340e91b3619e27216529","type":"p","scope":"block-c9ffa01c285a40059ef2e6c94b9c23c7","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-6e77340e91b3619e27216529","content":"每张 mask 的一像素边框和 `[20:23,20:23]` 区域标为 255，模拟未标注区域。255 不代表第四类；loss 用 `ignore_index=255` 排除，混淆矩阵也只统计有效像素。本次保留集有 269,696 个有效像素、25,216 个忽略像素。忽略区仍然会产生模型输出，但不能据此判断对错。","sha256":"70ad296a393605e878086a8e23b9d7c9e2a33445b81125777b77304dbbc615cb","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-c9ffa01c285a40059ef2e6c94b9c23c7","title":"三类逐像素预测的可执行定义","number":3},"sectionTitle":"三类逐像素预测的可执行定义","currentQuestion":"三类逐像素预测的可执行定义","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-3e16bc2e4975d1abb02b8cb5","nextBlock":"b-94f9b4cd08cb1fbed3e7f37c","prerequisites":[{"id":"b-0bc7b4f1c6358fcbbad7046d","url":"#b-0bc7b4f1c6358fcbbad7046d","role":"section-title"},{"id":"b-3e16bc2e4975d1abb02b8cb5","url":"#b-3e16bc2e4975d1abb02b8cb5","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-94f9b4cd08cb1fbed3e7f37c","type":"p","scope":"block-c9ffa01c285a40059ef2e6c94b9c23c7","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-94f9b4cd08cb1fbed3e7f37c","content":"以下代码格依次写出同一个自包含脚本。数据生成和度量函数在本册内完整给出，不依赖另一册先执行。","sha256":"e006bafcb2625b98d6083536703cdad4e89363e8ae0da401f01b30f9c071b135","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-c9ffa01c285a40059ef2e6c94b9c23c7","title":"三类逐像素预测的可执行定义","number":3},"sectionTitle":"三类逐像素预测的可执行定义","currentQuestion":"三类逐像素预测的可执行定义","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-6e77340e91b3619e27216529","nextBlock":"b-5c273aa319ff24f9a2a4a84a","prerequisites":[{"id":"b-0bc7b4f1c6358fcbbad7046d","url":"#b-0bc7b4f1c6358fcbbad7046d","role":"section-title"},{"id":"b-3e16bc2e4975d1abb02b8cb5","url":"#b-3e16bc2e4975d1abb02b8cb5","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-5c273aa319ff24f9a2a4a84a","type":"pre","scope":"block-1086347139a144a386633c49d3bc189a","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-5c273aa319ff24f9a2a4a84a","content":"```\n%%writefile lab11_segmentation.py\n\"\"\"LAB11: sampling warm-up, learned pixel readout, and image-to-mask FCN.\nRun: python lab11_segmentation.py --out lab11-results --epochs 20\nDependencies: torch numpy matplotlib. Self-contained; CPU only.\n\"\"\"\n\"\"\"Shared transparent geometry and image construction for LAB10/11; no downloads.\"\"\"\nimport json, hashlib, platform, sys, time\nfrom pathlib import Path\nfrom datetime import datetime, timezone\nimport numpy as np\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\nimport matplotlib\nmatplotlib.use('Agg')\nimport matplotlib.pyplot as plt\nfrom matplotlib.patches import Rectangle\n\ndef seed_all(seed=7):\n    np.random.seed(seed); torch.manual_seed(seed); torch.set_num_threads(2)\n\ndef iou_matrix(a,b):\n    if len(a)==0 or len(b)==0: return torch.zeros((len(a),len(b)))\n    lo=torch.maximum(a[:,None,:2],b[None,:,:2]); hi=torch.minimum(a[:,None,2:],b[None,:,2:])\n    inter=(hi-lo).clamp(min=0).prod(-1)\n    area_a=(a[:,2:]-a[:,:2]).clamp(min=0).prod(-1)\n    area_b=(b[:,2:]-b[:,:2]).clamp(min=0).prod(-1)\n    return inter/(area_a[:,None]+area_b[None,:]-inter).clamp(min=1e-8)\n\ndef make_scenes(n,seed,size=48,scale=1.0):\n    \"\"\"Independent seed defines original sample, scale changes only object size.\n    Boxes xyxy normalized; red rectangle=1, blue ellipse=2; zero to three objects.\n    Images are rasterized from latent scene, labels are never a network input.\n    \"\"\"\n    rng=np.random.default_rng(seed); xs=[]; ys=[]; masks=[]\n    yy,xx=np.mgrid[:size,:size]\n    for index in range(n):\n        image=rng.uniform(.035,.095,(3,size,size)).astype('float32')\n        num=int(rng.choice([0,1,2,3],p=[.18,.30,.36,.16]))\n        boxes=[]; labels=[]; mask=np.zeros((size,size),np.int64)\n        original=[]\n        for obj in range(num):\n            for attempt in range(60):\n                w,h=rng.integers(9,19,size=2); x=rng.integers(2,size-w-2); y=rng.integers(2,size-h-2)\n                box=np.array([x,y,x+w,y+h],np.float32)/size\n                if not original or iou_matrix(torch.tensor(np.array(original)),torch.tensor(box[None])).max()<.08: break\n            original.append(box); label=int(rng.integers(1,3)); color=rng.uniform(.7,.98)\n            cx,cy=(box[0]+box[2])/2,(box[1]+box[3])/2\n            sw,sh=(box[2]-box[0])*scale,(box[3]-box[1])*scale\n            x1,y1,x2,y2=np.round(np.array([cx-sw/2,cy-sh/2,cx+sw/2,cy+sh/2])*size).astype(int)\n            x2=max(x2,x1+2); y2=max(y2,y1+2)\n            region=(xx>=x1)&(xx<x2)&(yy>=y1)&(yy<y2)\n            if label==2: region &= ((xx+.5-(x1+x2)/2)/((x2-x1)/2))**2+((yy+.5-(y1+y2)/2)/((y2-y1)/2))**2<=1\n            image[:,region]*=.2\n            image[0 if label==1 else 2,region]=color\n            image[1,region]=.15+color*.12\n            mask[region]=label\n            boxes.append([x1/size,y1/size,x2/size,y2/size]); labels.append(label)\n        xs.append(image); masks.append(mask)\n        ys.append({'boxes':torch.tensor(boxes,dtype=torch.float32).reshape(-1,4),'labels':torch.tensor(labels,dtype=torch.long),'sample_id':f'{seed}:{index}'})\n    return torch.from_numpy(np.stack(xs)),ys,torch.from_numpy(np.stack(masks))\n\ndef nms(boxes,scores,threshold=.35):\n    order=torch.argsort(scores,descending=True,stable=True); keep=[]\n    while len(order):\n        i=order[0]; keep.append(i.item()); order=order[1:]\n        if len(order): order=order[iou_matrix(boxes[i:i+1],boxes[order])[0]<=threshold]\n    return torch.tensor(keep,dtype=torch.long)\n\ndef average_precision(predictions,targets,iou_threshold=.5,score_threshold=0):\n    \"\"\"Per-class global score order, max-IoU GT then unused check; all-points AP.\"\"\"\n    result={}; all_tp=all_fp=all_gt=0\n    for cls in [1,2]:\n        gt={i:t['boxes'][t['labels']==cls] for i,t in enumerate(targets)}\n        used={i:set() for i in gt}; total=sum(len(v) for v in gt.values())\n        rows=[]\n        for i,p in enumerate(predictions):\n            for j in range(len(p['scores'])):\n                if int(p['labels'][j])==cls and float(p['scores'][j])>=score_threshold:\n                    rows.append((float(p['scores'][j]),i,j,p['boxes'][j]))\n        rows.sort(key=lambda r:(-r[0],r[1],r[2])); tp=[]; fp=[]\n        for score,i,j,b in rows:\n            ok=False\n            if len(gt[i]):\n                overlaps=iou_matrix(b[None],gt[i])[0]; best=int(overlaps.argmax())\n                ok=float(overlaps[best])>=iou_threshold and best not in used[i]\n                if ok:used[i].add(best)\n            tp.append(int(ok));fp.append(int(not ok))\n        tp=np.cumsum(tp);fp=np.cumsum(fp)\n        recall=tp/max(total,1); precision=tp/np.maximum(tp+fp,1)\n        mr=np.r_[0,recall,1];mp=np.r_[0,precision,0]\n        mp=np.maximum.accumulate(mp[::-1])[::-1];loc=np.where(mr[1:]!=mr[:-1])[0]\n        ap=float(((mr[loc+1]-mr[loc])*mp[loc+1]).sum()) if total else None\n        result[str(cls)]={'AP':ap,'GT':total,'TP':int(tp[-1]) if len(tp) else 0,'FP':int(fp[-1]) if len(fp) else 0}\n        all_tp+=result[str(cls)]['TP'];all_fp+=result[str(cls)]['FP'];all_gt+=total\n    return {'per_class':result,'mAP':float(np.mean([r['AP'] for r in result.values() if r['AP'] is not None])),\n            'precision':all_tp/max(all_tp+all_fp,1),'recall':all_tp/max(all_gt,1),'iou_threshold':iou_threshold,'score_threshold':score_threshold}\n\ndef provenance(path,started):\n    p=Path(path)\n    return {'utc_started':started,'utc_completed':datetime.now(timezone.utc).isoformat(),'execution':'CPU, complete script',\n            'python':sys.version,'torch':torch.__version__,'numpy':np.__version__,'platform':platform.platform(),'threads':torch.get_num_threads(),\n            'code_sha256':hashlib.sha256(p.read_bytes()).hexdigest(),\n            'device':'CPU', 'source_file':p.name}\n\ndef save_json(path,data):Path(path).write_text(json.dumps(data,indent=2,ensure_ascii=False))\n\ndef segmentation_metrics(pred,target):\n    valid=target!=255; t=target[valid];p=pred[valid]\n    cm=torch.bincount(t*3+p,minlength=9).reshape(3,3).double()\n    intersection=cm.diag();union=cm.sum(0)+cm.sum(1)-intersection\n    iou=intersection/union.clamp(min=1)\n    return {'IoU_background':float(iou[0]),'IoU_red_rectangle':float(iou[1]),'IoU_blue_ellipse':float(iou[2]),\n            'mIoU_3_classes':float(iou[union>0].mean()),'pixel_accuracy':float(intersection.sum()/cm.sum()),\n            'valid_pixels':int(valid.sum()),'ignored_pixels':int((~valid).sum()),'confusion_matrix_true_rows':cm.int().tolist()}\n\nimport argparse\n\n\n```","sha256":"e64d051480b4b1cf6eb274e004d842c611e788263325a81de2897d635d096447","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-c9ffa01c285a40059ef2e6c94b9c23c7","title":"三类逐像素预测的可执行定义","number":3},"sectionTitle":"三类逐像素预测的可执行定义","currentQuestion":"三类逐像素预测的可执行定义","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-94f9b4cd08cb1fbed3e7f37c","nextBlock":null,"prerequisites":[{"id":"b-0bc7b4f1c6358fcbbad7046d","url":"#b-0bc7b4f1c6358fcbbad7046d","role":"section-title"},{"id":"b-3e16bc2e4975d1abb02b8cb5","url":"#b-3e16bc2e4975d1abb02b8cb5","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-4c6cacc8516fa1d94d1538eb","type":"h2","scope":"block-db968106cfcc441d831de4d9217b92ba","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-4c6cacc8516fa1d94d1538eb","content":"## 热身作为可回归检查","sha256":"c62954bcbce1bcf6e8cce3997a9fa9bbadc5e4479ac51d460366507d6fb649f5","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-db968106cfcc441d831de4d9217b92ba","title":"热身作为可回归检查","number":4},"sectionTitle":"热身作为可回归检查","currentQuestion":"热身作为可回归检查","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-0e02b9cfbf5201dfe95c53dc","prerequisites":[{"id":"b-0e02b9cfbf5201dfe95c53dc","url":"#b-0e02b9cfbf5201dfe95c53dc","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-0e02b9cfbf5201dfe95c53dc","type":"p","scope":"block-db968106cfcc441d831de4d9217b92ba","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-0e02b9cfbf5201dfe95c53dc","content":"`binary_metrics` 分别建立背景、前景的交集与并集，明确平均的类别集合。代码断言最近邻的前景 2/3、背景 5/6、mIoU=.75 和 8 个错误像素。若后续修改插值坐标或阈值，这些测试会直接提醒：你已经改变了原先的实验条件。","sha256":"58324c57b0a0635e3e4d7be651d9a8620cc66fa641471465334d09544bd2379c","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-db968106cfcc441d831de4d9217b92ba","title":"热身作为可回归检查","number":4},"sectionTitle":"热身作为可回归检查","currentQuestion":"热身作为可回归检查","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-4c6cacc8516fa1d94d1538eb","nextBlock":null,"prerequisites":[{"id":"b-4c6cacc8516fa1d94d1538eb","url":"#b-4c6cacc8516fa1d94d1538eb","role":"section-title"}],"relatedBlocks":[]},{"id":"b-4e07b31d184237b0ecb3dd36","type":"h2","scope":"block-a83492c549764a6aad90a23cfb322167","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-4e07b31d184237b0ecb3dd36","content":"## 为什么同时训练 1×1 读出和 FCN","sha256":"d47e56d245656ae887c7eb760e578713ac36b028b1761e7a1cdc24c593cc57b1","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-a83492c549764a6aad90a23cfb322167","title":"为什么同时训练 1×1 读出和 FCN","number":5},"sectionTitle":"为什么同时训练 1×1 读出和 FCN","currentQuestion":"为什么同时训练 1×1 读出和 FCN","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-c51c6a79aa762b7f79ca6612","prerequisites":[{"id":"b-c51c6a79aa762b7f79ca6612","url":"#b-c51c6a79aa762b7f79ca6612","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-c51c6a79aa762b7f79ca6612","type":"p","scope":"block-a83492c549764a6aad90a23cfb322167","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-c51c6a79aa762b7f79ca6612","content":"逐像素读出是 `Conv2d(3,3,1)`，只有 12 个参数：每个像素用共享线性变换和 softmax 分类，没有邻域、形状或对象关系。它是原正文曾承诺而旧代码未实现的可学习逻辑读出。","sha256":"7d5a1add654bd29f2bf8645c182e7b93815814ebedcfc5d3f9c65a7686918d4c","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-a83492c549764a6aad90a23cfb322167","title":"为什么同时训练 1×1 读出和 FCN","number":5},"sectionTitle":"为什么同时训练 1×1 读出和 FCN","currentQuestion":"为什么同时训练 1×1 读出和 FCN","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-4e07b31d184237b0ecb3dd36","nextBlock":"b-07a6fee3c3460c5211074bb9","prerequisites":[{"id":"b-4e07b31d184237b0ecb3dd36","url":"#b-4e07b31d184237b0ecb3dd36","role":"section-title"}],"relatedBlocks":[]},{"id":"b-07a6fee3c3460c5211074bb9","type":"p","scope":"block-a83492c549764a6aad90a23cfb322167","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-07a6fee3c3460c5211074bb9","content":"FCN 有 20,590 个参数。细分支在 48×48 上提取边缘；粗分支两次 stride=2 得到 12×12 特征，再用 1×1 卷积产生三通道 logits。粗 logits 双线性恢复到 48×48，与细分支 logits 相加。细分支保留空间细节，粗分支提供较大邻域；两者通过同一个像素交叉熵一起更新。这个结构借鉴 FCN 的粗细融合思想，并非 D2L 预训练 ResNet-18/转置卷积实现的逐行复制。","sha256":"2c69e23b066df28a6a6aba3050f0068b12c0749c5772e39e19e4960b4ba27ba0","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-a83492c549764a6aad90a23cfb322167","title":"为什么同时训练 1×1 读出和 FCN","number":5},"sectionTitle":"为什么同时训练 1×1 读出和 FCN","currentQuestion":"为什么同时训练 1×1 读出和 FCN","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-c51c6a79aa762b7f79ca6612","nextBlock":"b-9c6aa1d4f554fbf96410b83e","prerequisites":[{"id":"b-4e07b31d184237b0ecb3dd36","url":"#b-4e07b31d184237b0ecb3dd36","role":"section-title"},{"id":"b-c51c6a79aa762b7f79ca6612","url":"#b-c51c6a79aa762b7f79ca6612","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-9c6aa1d4f554fbf96410b83e","type":"p","scope":"block-a83492c549764a6aad90a23cfb322167","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-9c6aa1d4f554fbf96410b83e","content":"损失 $-\\sum_{u\\in valid}\\log softmax(z_u)_{y_u}/|valid|$ 对所有有效像素平均。没有任何一项要求不同物体的实例 ID，因此相邻的两个蓝椭圆都应是类别 2；但椭圆间属于背景的窄缝仍必须保留。","sha256":"fe711ade7476462f1282523a3800320717ac116f9f5f229c3faab01f52220735","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-a83492c549764a6aad90a23cfb322167","title":"为什么同时训练 1×1 读出和 FCN","number":5},"sectionTitle":"为什么同时训练 1×1 读出和 FCN","currentQuestion":"为什么同时训练 1×1 读出和 FCN","sourceSlides":[],"knowledgeBlock":null,"formulas":[{"latex":"-\\sum_{u\\in valid}\\log softmax(z_u)_{y_u}/|valid|","definitionContext":"为什么同时训练 1×1 读出和 FCN"}],"previousBlock":"b-07a6fee3c3460c5211074bb9","nextBlock":"b-952c7e058027c5348ab37248","prerequisites":[{"id":"b-4e07b31d184237b0ecb3dd36","url":"#b-4e07b31d184237b0ecb3dd36","role":"section-title"},{"id":"b-c51c6a79aa762b7f79ca6612","url":"#b-c51c6a79aa762b7f79ca6612","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-952c7e058027c5348ab37248","type":"pre","scope":"block-455f430e56104e59b4a5886436462ef5","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-952c7e058027c5348ab37248","content":"```\n%%writefile -a lab11_segmentation.py\ndef binary_metrics(pred,target):\n    ious=[]\n    for cls in [0,1]:\n        inter=((pred==cls)&(target==cls)).sum().item();union=((pred==cls)|(target==cls)).sum().item()\n        ious.append(inter/union)\n    return {'background_IoU':ious[0],'foreground_IoU':ious[1],'mIoU_two_classes':sum(ious)/2,\n            'pixel_accuracy':float((pred==target).float().mean()),'error_pixels':int((pred!=target).sum())}\n\ndef sampling_warmup(out):\n    mask=torch.zeros((8,8),dtype=torch.long);mask[2:6,3:7]=1\n    coarse=F.avg_pool2d(mask.float()[None,None],2)\n    nearest=F.interpolate(coarse,scale_factor=2,mode='nearest')[0,0]>=.5\n    bilinear=F.interpolate(coarse,scale_factor=2,mode='bilinear',align_corners=False)[0,0]>=.5\n    nm=binary_metrics(nearest,mask);bm=binary_metrics(bilinear,mask)\n    assert abs(nm['foreground_IoU']-2/3)<1e-12\n    assert abs(nm['background_IoU']-5/6)<1e-12\n    assert abs(nm['mIoU_two_classes']-.75)<1e-12 and nm['error_pixels']==8\n    # Bilinear interpolates probabilities/logits; categorical labels use nearest.\n    fig,axes=plt.subplots(1,4,figsize=(10,3))\n    for ax,data,title in zip(axes,[mask,coarse[0,0],nearest,bilinear],['Known mask','2x2 average','Nearest >=0.5','Bilinear >=0.5']):\n        ax.imshow(data,cmap='gray',vmin=0,vmax=1,interpolation='nearest');ax.set_title(title);ax.axis('off')\n    fig.tight_layout();fig.savefig(out/'sampling-warmup.png',dpi=150);plt.close(fig)\n    return {'nearest':nm,'bilinear_align_corners_false':bm,'identity':'known-mask resampling only; no image model'}\n\nclass PixelReadout(nn.Module):\n    \"\"\"A learned softmax regression at every RGB pixel; no spatial receptive field.\"\"\"\n    def __init__(self):super().__init__();self.readout=nn.Conv2d(3,3,1)\n    def forward(self,x,mode='bilinear'):return self.readout(x)\n\nclass SmallFCN(nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.fine=nn.Sequential(nn.Conv2d(3,12,3,padding=1),nn.ReLU(),nn.Conv2d(12,12,3,padding=1),nn.ReLU())\n        self.coarse=nn.Sequential(nn.Conv2d(12,24,3,stride=2,padding=1),nn.ReLU(),nn.Conv2d(24,32,3,stride=2,padding=1),nn.ReLU(),nn.Conv2d(32,32,3,padding=1),nn.ReLU())\n        self.head=nn.Conv2d(32,3,1);self.skip=nn.Conv2d(12,3,1)\n    def forward(self,x,mode='bilinear'):\n        fine=self.fine(x);coarse_logits=self.head(self.coarse(fine))\n        kw={'align_corners':False} if mode=='bilinear' else {}\n        return F.interpolate(coarse_logits,size=x.shape[-2:],mode=mode,**kw)+self.skip(fine)\n\ndef with_ignore(masks):\n    masks=masks.clone();masks[:,0,:]=255;masks[:,-1,:]=255;masks[:,:,0]=255;masks[:,:,-1]=255\n    # A fixed small region represents missing annotation, not another semantic class.\n    masks[:,20:23,20:23]=255\n    return masks\n\n\n```","sha256":"35b26bb8eeec03243eb73037e44d9ec58aff583454c17a469db37c5b6bc94c1b","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-a83492c549764a6aad90a23cfb322167","title":"为什么同时训练 1×1 读出和 FCN","number":5},"sectionTitle":"为什么同时训练 1×1 读出和 FCN","currentQuestion":"为什么同时训练 1×1 读出和 FCN","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-9c6aa1d4f554fbf96410b83e","nextBlock":null,"prerequisites":[{"id":"b-4e07b31d184237b0ecb3dd36","url":"#b-4e07b31d184237b0ecb3dd36","role":"section-title"},{"id":"b-c51c6a79aa762b7f79ca6612","url":"#b-c51c6a79aa762b7f79ca6612","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-b4d6e61570317196f0e7cf1f","type":"h2","scope":"block-6b3780f4d85d41e5b17de37044b3ddd5","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-b4d6e61570317196f0e7cf1f","content":"## 参数更新和三个单条件比较","sha256":"fad19dd655cbff5dd4998b491fc256cf4262c5855f1b64770a7151b785bd452c","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-6b3780f4d85d41e5b17de37044b3ddd5","title":"参数更新和三个单条件比较","number":6},"sectionTitle":"参数更新和三个单条件比较","currentQuestion":"参数更新和三个单条件比较","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-25b6566dff24075424d85c13","prerequisites":[{"id":"b-25b6566dff24075424d85c13","url":"#b-25b6566dff24075424d85c13","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-25b6566dff24075424d85c13","type":"p","scope":"block-6b3780f4d85d41e5b17de37044b3ddd5","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-25b6566dff24075424d85c13","content":"像素读出训练 25 epoch、Adam lr=.03；FCN 训练 20 epoch、Adam lr=.003。每个 batch 同时翻转图像与标签、前向得到 logits、计算 CE、清零梯度、反向传播、更新参数。","sha256":"f35c020a79c857fb22b37d09d238ef0a9297a6e453bfbd6d87e40564491e7fb4","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-6b3780f4d85d41e5b17de37044b3ddd5","title":"参数更新和三个单条件比较","number":6},"sectionTitle":"参数更新和三个单条件比较","currentQuestion":"参数更新和三个单条件比较","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-b4d6e61570317196f0e7cf1f","nextBlock":"b-62f2c7ab1e9e030831331323","prerequisites":[{"id":"b-b4d6e61570317196f0e7cf1f","url":"#b-b4d6e61570317196f0e7cf1f","role":"section-title"}],"relatedBlocks":[]},{"id":"b-62f2c7ab1e9e030831331323","type":"p","scope":"block-6b3780f4d85d41e5b17de37044b3ddd5","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-62f2c7ab1e9e030831331323","content":"三个比较均使用同一训练后权重：(1) 只把粗 logits 的 bilinear 换 nearest；(2) 相同潜在场景的对象尺寸乘 .45，其余生成条件保持一致；(3) RGB 做 5×5 均值模糊，几何和 target 不变。前两者分别检查重采样方式和尺度，第三者检查边缘观测变弱。像素读出也参加尺度与模糊对照，避免把一个完美基准遗漏在困难条件之外。","sha256":"fac3a75cb04573f3d757a2689cc26291f626146b58cdb675411872553a11cbff","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-6b3780f4d85d41e5b17de37044b3ddd5","title":"参数更新和三个单条件比较","number":6},"sectionTitle":"参数更新和三个单条件比较","currentQuestion":"参数更新和三个单条件比较","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-25b6566dff24075424d85c13","nextBlock":"b-92fea66d975a7ef25bb4ddbf","prerequisites":[{"id":"b-b4d6e61570317196f0e7cf1f","url":"#b-b4d6e61570317196f0e7cf1f","role":"section-title"},{"id":"b-25b6566dff24075424d85c13","url":"#b-25b6566dff24075424d85c13","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-92fea66d975a7ef25bb4ddbf","type":"pre","scope":"block-9ac44bfb569543debd1b305a066b77bb","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-92fea66d975a7ef25bb4ddbf","content":"```\n%%writefile -a lab11_segmentation.py\ndef train_model(model,x,target,epochs,lr):\n    opt=torch.optim.Adam(model.parameters(),lr=lr);history=[]\n    for epoch in range(epochs):\n        model.train();losses=[]\n        for ids in torch.randperm(len(x)).split(32):\n            images=x[ids];labels=target[ids]\n            # One geometric decision applies to both image and mask.\n            if torch.rand(())<.5:images=images.flip(-1);labels=labels.flip(-1)\n            logits=model(images)\n            assert logits.shape==(len(ids),3,48,48) and labels.dtype==torch.long\n            loss=F.cross_entropy(logits,labels,ignore_index=255)\n            opt.zero_grad();loss.backward();opt.step();losses.append(float(loss.detach()))\n        history.append(float(np.mean(losses)))\n        if epoch==0 or (epoch+1)%5==0:print(type(model).__name__,epoch+1,history[-1],flush=True)\n    return history\n\n@torch.no_grad()\ndef predict(model,x,mode='bilinear'):\n    model.eval();return torch.cat([model(b,mode=mode).argmax(1) for b in x.split(32)])\n\ndef plot_predictions(images,truth,pred,path,title,indices=None):\n    if indices is None:indices=[0,1,2,3]\n    palette=np.array([[.04,.04,.05],[.95,.22,.15],[.10,.45,1],[.55,.55,.55]])\n    fig,axes=plt.subplots(len(indices),4,figsize=(10,2.6*len(indices)),squeeze=False)\n    for row,i in enumerate(indices):\n        mask=truth[i].numpy().copy();mask[mask==255]=3\n        error=(pred[i]!=truth[i])&(truth[i]!=255)\n        data=[images[i].permute(1,2,0).numpy(),palette[mask],palette[pred[i].numpy()],error.numpy()]\n        for ax,d,name in zip(axes[row],data,['Input RGB','Target / gray=ignore','Model prediction','Error on valid pixels']):\n            ax.imshow(d,cmap='magma',interpolation='nearest');ax.axis('off');ax.set_title(f'{name} #{i}',fontsize=9)\n    fig.suptitle(title);fig.tight_layout();fig.savefig(path,dpi=140);plt.close(fig)\n\n\n```","sha256":"9280d9f051fba81f9736060d652c337abb09125136855ddeff5476d73d4ad9c5","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-6b3780f4d85d41e5b17de37044b3ddd5","title":"参数更新和三个单条件比较","number":6},"sectionTitle":"参数更新和三个单条件比较","currentQuestion":"参数更新和三个单条件比较","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-62f2c7ab1e9e030831331323","nextBlock":"b-a683786ba4fe9fc758a424f9","prerequisites":[{"id":"b-b4d6e61570317196f0e7cf1f","url":"#b-b4d6e61570317196f0e7cf1f","role":"section-title"},{"id":"b-25b6566dff24075424d85c13","url":"#b-25b6566dff24075424d85c13","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-a683786ba4fe9fc758a424f9","type":"pre","scope":"block-26c6c8535ba248998b17337eae768d44","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-a683786ba4fe9fc758a424f9","content":"```\n%%writefile -a lab11_segmentation.py\ndef run(out='lab11-results',epochs=20):\n    started=datetime.now(timezone.utc).isoformat();start=time.time();out=Path(out);out.mkdir(exist_ok=True,parents=True);seed_all(19)\n    warmup=sampling_warmup(out)\n    train,_,raw_train=make_scenes(384,7101);test,_,raw_test=make_scenes(128,7901)\n    small,_,raw_small=make_scenes(128,7901,scale=.45)\n    target=with_ignore(raw_train);test_target=with_ignore(raw_test);small_target=with_ignore(raw_small)\n    readout=PixelReadout();pixel_history=train_model(readout,train,target,epochs=25,lr=.03)\n    fcn=SmallFCN();random_pred=predict(fcn,test);history=train_model(fcn,train,target,epochs=epochs,lr=.003)\n    pred=predict(fcn,test);nearest_pred=predict(fcn,test,mode='nearest');small_pred=predict(fcn,small)\n    # Same image/target, blur changes RGB only, preserving geometry and label.\n    blurred=F.avg_pool2d(F.pad(test,(2,2,2,2),mode='reflect'),5,stride=1);blur_pred=predict(fcn,blurred)\n    # ignore_index check: arbitrarily changing predictions only at ignored pixels leaves metrics identical.\n    altered=pred.clone();altered[test_target==255]=(altered[test_target==255]+1)%3\n    assert segmentation_metrics(pred,test_target)==segmentation_metrics(altered,test_target)\n    # Synchronized flip can be undone on both image and categorical target.\n    assert torch.equal(train.flip(-1).flip(-1),train) and torch.equal(target.flip(-1).flip(-1),target)\n    results={'provenance':provenance(__file__,started),'config':{'image_shape':[3,48,48],'logits_shape':['B',3,48,48],'target_shape':['B',48,48],\n            'target_dtype':'int64','classes':{'0':'background','1':'red rectangle','2':'blue ellipse'},'ignore_label':255,\n            'train_count':384,'heldout_count':128,'split_seeds':[7101,7901],'seed':19,'FCN_epochs':epochs,'readout_epochs':25,\n            'loss':'cross_entropy on valid pixels, ignore_index=255','optimizer':'Adam FCN lr=.003; pixel readout lr=.03',\n            'FCN_parameters':sum(p.numel() for p in fcn.parameters()),'readout_parameters':sum(p.numel() for p in readout.parameters()),\n            'upsampling':'12x12 coarse logits ->48x48 bilinear align_corners=False + fine skip logits','augmentation':'paired horizontal flip',\n            'data_identity':'generated scenes with color/shape correlated; heldout original scene seeds; no pretrained weights'},\n            'sampling_warmup':warmup,'random_FCN':segmentation_metrics(random_pred,test_target),\n            'learned_pixel_readout':segmentation_metrics(predict(readout,test),test_target),'trained_FCN':segmentation_metrics(pred,test_target),\n            'condition_nearest_logits':segmentation_metrics(nearest_pred,test_target),'condition_scale_045':segmentation_metrics(small_pred,small_target),\n            'condition_RGB_blur5':segmentation_metrics(blur_pred,test_target),'readout_RGB_blur5':segmentation_metrics(predict(readout,blurred),test_target),'readout_scale_045':segmentation_metrics(predict(readout,small),small_target),'history_FCN':history,'history_pixel_readout':pixel_history,\n            'ignore_metric_invariance_test':'passed','paired_flip_involution_test':'passed','sampling_known_values_tests':'passed','seconds':time.time()-start}\n    counts=((pred!=test_target)&(test_target!=255)).flatten(1).sum(1);worst=counts.argsort(descending=True)[:4].tolist()\n    results['failure_examples']=[{'sample_index':i,'wrong_valid_pixels':int(counts[i])} for i in worst]\n    torch.save({'state_dict':fcn.state_dict(),'config':results['config']},out/'fcn.pt');torch.save(readout.state_dict(),out/'pixel-readout.pt')\n    np.savez_compressed(out/'heldout-input-target-predictions.npz',images=test.numpy(),target=test_target.numpy(),prediction=pred.numpy(),\n                       half_scale_images=small.numpy(),half_scale_target=small_target.numpy(),half_scale_prediction=small_pred.numpy(),blur_images=blurred.numpy(),blur_prediction=blur_pred.numpy())\n    plot_predictions(test,test_target,pred,out/'heldout-segmentation.png','FCN heldout image-to-mask predictions')\n    plot_predictions(test,test_target,pred,out/'failure-segmentation.png','Four largest valid-pixel error counts',worst)\n    plot_predictions(small,small_target,small_pred,out/'small-object-segmentation.png','Same latent scenes: object dimensions x0.45')\n    plot_predictions(blurred,test_target,blur_pred,out/'blur-segmentation.png','Same geometry, RGB blurred with 5x5 average')\n    fig,ax=plt.subplots(figsize=(7,4));ax.plot(history,label='FCN');ax.plot(pixel_history,label='pixel softmax readout');ax.set(xlabel='epoch (zero based)',ylabel='valid-pixel CE');ax.legend();fig.tight_layout();fig.savefig(out/'training-curve.png',dpi=150);plt.close(fig)\n    save_json(out/'run.json',results);print(json.dumps({k:results[k]['mIoU_3_classes'] for k in ['random_FCN','learned_pixel_readout','trained_FCN','condition_scale_045','condition_RGB_blur5']},indent=2),flush=True)\n    return results\n\nif __name__=='__main__':\n    p=argparse.ArgumentParser();p.add_argument('--out',default='lab11-results');p.add_argument('--epochs',type=int,default=20);a=p.parse_args();run(a.out,a.epochs)\n\n```","sha256":"cbf83d8e6014f82b705eda9f4ac45b1f5aa1fc34316744b66ad8e4d20f7d7705","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-6b3780f4d85d41e5b17de37044b3ddd5","title":"参数更新和三个单条件比较","number":6},"sectionTitle":"参数更新和三个单条件比较","currentQuestion":"参数更新和三个单条件比较","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-92fea66d975a7ef25bb4ddbf","nextBlock":null,"prerequisites":[{"id":"b-b4d6e61570317196f0e7cf1f","url":"#b-b4d6e61570317196f0e7cf1f","role":"section-title"},{"id":"b-25b6566dff24075424d85c13","url":"#b-25b6566dff24075424d85c13","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-08383254584ba0066d9291e3","type":"h2","scope":"block-a27735d7ff6b479189f78046ff168f4a","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-08383254584ba0066d9291e3","content":"## 运行：模型输出必须和输入、真值一起看","sha256":"7a697344de10e39e20ad3b1fcd35122b445daf2de6b7e61f710c02f563ad9ea5","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-a27735d7ff6b479189f78046ff168f4a","title":"运行：模型输出必须和输入、真值一起看","number":7},"sectionTitle":"运行：模型输出必须和输入、真值一起看","currentQuestion":"运行：模型输出必须和输入、真值一起看","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-9839180e3095785d5e507a49","prerequisites":[{"id":"b-9839180e3095785d5e507a49","url":"#b-9839180e3095785d5e507a49","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-9839180e3095785d5e507a49","type":"p","scope":"block-a27735d7ff6b479189f78046ff168f4a","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-9839180e3095785d5e507a49","content":"下格在新 Python 进程完整运行。每张结果图按“RGB / target / prediction / 有效像素错误”排列，target 中灰色是 ignore，不是模型应该学出的类别。脚本还检查：任意修改 ignore 区预测不改变指标；同步翻转两次恢复输入和标签。","sha256":"3c9ce11d7745a44e9bb8e0cf4f4b05457d16b2291abb52e821e33b5a1b1cbd78","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-a27735d7ff6b479189f78046ff168f4a","title":"运行：模型输出必须和输入、真值一起看","number":7},"sectionTitle":"运行：模型输出必须和输入、真值一起看","currentQuestion":"运行：模型输出必须和输入、真值一起看","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-08383254584ba0066d9291e3","nextBlock":"b-58958dea87a464fec08161e4","prerequisites":[{"id":"b-08383254584ba0066d9291e3","url":"#b-08383254584ba0066d9291e3","role":"section-title"}],"relatedBlocks":[]},{"id":"b-58958dea87a464fec08161e4","type":"pre","scope":"block-54cfa2249229431fa7e651cfd5d0244a","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-58958dea87a464fec08161e4","content":"```\nimport subprocess,sys,json\nsubprocess.run([sys.executable,'lab11_segmentation.py','--out','lab11-results-rerun','--epochs','20'],check=True)\nR=json.loads(Path('lab11-results-rerun/run.json').read_text())\nprint('sampling:',R['sampling_warmup'])\nfor key in ['random_FCN','learned_pixel_readout','trained_FCN','condition_nearest_logits','condition_scale_045','condition_RGB_blur5','readout_RGB_blur5']:\n    r=R[key];print(key,{k:round(v,5) for k,v in r.items() if 'IoU' in k or k=='pixel_accuracy'})\nprint(R['provenance'])\nfrom IPython.display import Image,display\nfor filename in ['sampling-warmup.png','heldout-segmentation.png','failure-segmentation.png','small-object-segmentation.png','blur-segmentation.png']:\n    display(Image(filename='lab11-results-rerun/'+filename))\n```","sha256":"511f953428fc36f69fb5ac6a0e012f4337791cd5195b05446ab91ccb7a45db98","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-a27735d7ff6b479189f78046ff168f4a","title":"运行：模型输出必须和输入、真值一起看","number":7},"sectionTitle":"运行：模型输出必须和输入、真值一起看","currentQuestion":"运行：模型输出必须和输入、真值一起看","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-9839180e3095785d5e507a49","nextBlock":null,"prerequisites":[{"id":"b-08383254584ba0066d9291e3","url":"#b-08383254584ba0066d9291e3","role":"section-title"},{"id":"b-9839180e3095785d5e507a49","url":"#b-9839180e3095785d5e507a49","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-dffa3ed1f697cfcf9b14bef3","type":"h2","scope":"block-16412ad68e504e8f9b564ed686a53b4c","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-dffa3ed1f697cfcf9b14bef3","content":"## 已完成结果：复杂模型没有被安排成赢家","sha256":"16424645f3255bd542eaba92027ec7ebc3e44924856df20f0677d9042a3a9af4","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-16412ad68e504e8f9b564ed686a53b4c","title":"已完成结果：复杂模型没有被安排成赢家","number":8},"sectionTitle":"已完成结果：复杂模型没有被安排成赢家","currentQuestion":"已完成结果：复杂模型没有被安排成赢家","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-e60a420c4bd5de51186234ca","prerequisites":[{"id":"b-e60a420c4bd5de51186234ca","url":"#b-e60a420c4bd5de51186234ca","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-e60a420c4bd5de51186234ca","type":"p","scope":"block-16412ad68e504e8f9b564ed686a53b4c","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-e60a420c4bd5de51186234ca","content":"本地 CPU 完整运行开始于 `2026-09-22T16:28:24.497499+00:00`，PyTorch `2.14.0+cpu`；源码 SHA-256 为 `ecbe38c4a53eb691b7e31be95eaa8ab3a0b93578005d2605072196cc5dc66445`。FCN 训练 CE 从 .85632 降到 .00492。下面 mIoU 均对背景、红矩形、蓝椭圆三个类别等权平均；先在整份保留集累计混淆矩阵，再计算逐类 IoU，未对每张图的 IoU 简单平均。","sha256":"03a19cae81d2ff11ebeebadbfcc0fe5635e45af05769809a745eaab573b92218","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-16412ad68e504e8f9b564ed686a53b4c","title":"已完成结果：复杂模型没有被安排成赢家","number":8},"sectionTitle":"已完成结果：复杂模型没有被安排成赢家","currentQuestion":"已完成结果：复杂模型没有被安排成赢家","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-dffa3ed1f697cfcf9b14bef3","nextBlock":"b-2ad25ecb41654c8807417749","prerequisites":[{"id":"b-dffa3ed1f697cfcf9b14bef3","url":"#b-dffa3ed1f697cfcf9b14bef3","role":"section-title"}],"relatedBlocks":[]},{"id":"b-2ad25ecb41654c8807417749","type":"table","scope":"block-16412ad68e504e8f9b564ed686a53b4c","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-2ad25ecb41654c8807417749","content":"| 模型 / 输入条件 | 三类 mIoU | 结论能说到哪里 |\n| --- | --- | --- |\n| 随机初始化 FCN | .01470 | 尚未学到类别读出 |\n| 训练后 1×1 RGB 读出 | 1.00000 | 本合成集每个像素颜色已足以分类 |\n| 训练后 FCN，双线性 | .99041 | 学到图像到 mask，边界仍有少量错 |\n| 同 FCN，最近邻 logits | .91180 | 改变上采样坐标权重影响空间决策 |\n| 同 FCN，对象尺寸 ×.45 | .94396 | 细小蓝对象和窄缝更难保持 |\n| 同 FCN，RGB 5×5 模糊 | .92397 | 边缘观测变弱时性能下降 |\n| 同 RGB 读出，5×5 模糊 | .84996 | 无邻域基准受混合颜色更大影响 |","sha256":"c1b378d36ab88faa10dd2f0b6326a5e65b6738a79d88081bf4be163e38fec080","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-16412ad68e504e8f9b564ed686a53b4c","title":"已完成结果：复杂模型没有被安排成赢家","number":8},"sectionTitle":"已完成结果：复杂模型没有被安排成赢家","currentQuestion":"已完成结果：复杂模型没有被安排成赢家","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"table":{"headers":["模型 / 输入条件","三类 mIoU","结论能说到哪里"],"rows":[["模型 / 输入条件","三类 mIoU","结论能说到哪里"],["随机初始化 FCN",".01470","尚未学到类别读出"],["训练后 1×1 RGB 读出","1.00000","本合成集每个像素颜色已足以分类"],["训练后 FCN，双线性",".99041","学到图像到 mask，边界仍有少量错"],["同 FCN，最近邻 logits",".91180","改变上采样坐标权重影响空间决策"],["同 FCN，对象尺寸 ×.45",".94396","细小蓝对象和窄缝更难保持"],["同 FCN，RGB 5×5 模糊",".92397","边缘观测变弱时性能下降"],["同 RGB 读出，5×5 模糊",".84996","无邻域基准受混合颜色更大影响"]]},"previousBlock":"b-e60a420c4bd5de51186234ca","nextBlock":"b-5f783da5d8bc88aa957268a5","prerequisites":[{"id":"b-dffa3ed1f697cfcf9b14bef3","url":"#b-dffa3ed1f697cfcf9b14bef3","role":"section-title"},{"id":"b-e60a420c4bd5de51186234ca","url":"#b-e60a420c4bd5de51186234ca","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-5f783da5d8bc88aa957268a5","type":"p","scope":"block-16412ad68e504e8f9b564ed686a53b4c","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-5f783da5d8bc88aa957268a5","content":"像素读出比 FCN 的原分布结果更好，是有意义的负结果：更复杂结构不是得分保证，数据又带有强颜色线索。在尺寸 ×.45 条件下读出仍为 1.0，说明纯颜色规则不会因为面积变小而失效；在模糊条件下，邻域 FCN 才表现出比单像素读出更强的耐受。这不能直接推广到真实语义分割，真实同类物体的颜色并不恒定。","sha256":"101e0c7e5c59f819cddc0f9d349f0e531473f5f092cf9b4dff94298693faa83f","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-16412ad68e504e8f9b564ed686a53b4c","title":"已完成结果：复杂模型没有被安排成赢家","number":8},"sectionTitle":"已完成结果：复杂模型没有被安排成赢家","currentQuestion":"已完成结果：复杂模型没有被安排成赢家","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-2ad25ecb41654c8807417749","nextBlock":"b-2f4a8ca4af2afafcfe7e51b2","prerequisites":[{"id":"b-dffa3ed1f697cfcf9b14bef3","url":"#b-dffa3ed1f697cfcf9b14bef3","role":"section-title"},{"id":"b-e60a420c4bd5de51186234ca","url":"#b-e60a420c4bd5de51186234ca","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-2f4a8ca4af2afafcfe7e51b2","type":"p","scope":"block-16412ad68e504e8f9b564ed686a53b4c","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-2f4a8ca4af2afafcfe7e51b2","content":"![采样热身](/assets/display/0eb14c8f3f86cf2d8b3c9b65.webp)","sha256":"805f9aef538f2fbdbb2a98574452c74ecb9fae28fbe7bff0adbce451952c0d01","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-16412ad68e504e8f9b564ed686a53b4c","title":"已完成结果：复杂模型没有被安排成赢家","number":8},"sectionTitle":"已完成结果：复杂模型没有被安排成赢家","currentQuestion":"已完成结果：复杂模型没有被安排成赢家","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-5f783da5d8bc88aa957268a5","nextBlock":"b-38dd2347ed9de6d3efeb667b","prerequisites":[{"id":"b-dffa3ed1f697cfcf9b14bef3","url":"#b-dffa3ed1f697cfcf9b14bef3","role":"section-title"},{"id":"b-e60a420c4bd5de51186234ca","url":"#b-e60a420c4bd5de51186234ca","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-38dd2347ed9de6d3efeb667b","type":"p","scope":"block-16412ad68e504e8f9b564ed686a53b4c","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-38dd2347ed9de6d3efeb667b","content":"![保留集逐像素预测](/assets/display/1b11f25259c1fe3405e0b7a5.webp)","sha256":"cab5afe03f707fb5bbca4cddf8778f536cfb8d6b9adca57c29a5107c47636a95","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-16412ad68e504e8f9b564ed686a53b4c","title":"已完成结果：复杂模型没有被安排成赢家","number":8},"sectionTitle":"已完成结果：复杂模型没有被安排成赢家","currentQuestion":"已完成结果：复杂模型没有被安排成赢家","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-2f4a8ca4af2afafcfe7e51b2","nextBlock":"b-ef22cb41beac6039ae1f8b0f","prerequisites":[{"id":"b-dffa3ed1f697cfcf9b14bef3","url":"#b-dffa3ed1f697cfcf9b14bef3","role":"section-title"},{"id":"b-e60a420c4bd5de51186234ca","url":"#b-e60a420c4bd5de51186234ca","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-ef22cb41beac6039ae1f8b0f","type":"p","scope":"block-16412ad68e504e8f9b564ed686a53b4c","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-ef22cb41beac6039ae1f8b0f","content":"错误最多的图 89 有 25 个有效像素错，图 125 有 18 个，图 56 有 16 个，图 92 有 13 个。图 89/125 的两个蓝椭圆间出现背景窄缝被填平的错误：mask 所需的边界证据可能在低分辨率表示中混合，即使细分支能改善，也不保证完全恢复。此处蓝色连通不等于实例计数正确，本册没有训练实例分割。","sha256":"26ff18341d4fa15f7e4403a265645c5904a90634a1aaa35f64c7506e131fb06d","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-16412ad68e504e8f9b564ed686a53b4c","title":"已完成结果：复杂模型没有被安排成赢家","number":8},"sectionTitle":"已完成结果：复杂模型没有被安排成赢家","currentQuestion":"已完成结果：复杂模型没有被安排成赢家","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-38dd2347ed9de6d3efeb667b","nextBlock":"b-22cc4932bbd5abc49518f849","prerequisites":[{"id":"b-dffa3ed1f697cfcf9b14bef3","url":"#b-dffa3ed1f697cfcf9b14bef3","role":"section-title"},{"id":"b-e60a420c4bd5de51186234ca","url":"#b-e60a420c4bd5de51186234ca","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-22cc4932bbd5abc49518f849","type":"p","scope":"block-16412ad68e504e8f9b564ed686a53b4c","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-22cc4932bbd5abc49518f849","content":"![错误像素与窄缝](/assets/display/f2028b85a049b53efbcbbb7a.webp)","sha256":"cdaa1a9b8ed2f648a296b64726de36de5bb79d8decf910109b5bb708b8966142","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-16412ad68e504e8f9b564ed686a53b4c","title":"已完成结果：复杂模型没有被安排成赢家","number":8},"sectionTitle":"已完成结果：复杂模型没有被安排成赢家","currentQuestion":"已完成结果：复杂模型没有被安排成赢家","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-ef22cb41beac6039ae1f8b0f","nextBlock":"b-e2123c4f4809a1a7db16c6f7","prerequisites":[{"id":"b-dffa3ed1f697cfcf9b14bef3","url":"#b-dffa3ed1f697cfcf9b14bef3","role":"section-title"},{"id":"b-e60a420c4bd5de51186234ca","url":"#b-e60a420c4bd5de51186234ca","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-e2123c4f4809a1a7db16c6f7","type":"p","scope":"block-16412ad68e504e8f9b564ed686a53b4c","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-e2123c4f4809a1a7db16c6f7","content":"尺寸 ×.45 后像素准确率仍有 .99816，但蓝椭圆 IoU 只有 .85763，红矩形 .97613，背景 .99812。小对象在整图像素数中占比太低，仅报告准确率会掩盖其损失。最近邻对照的蓝类 IoU 进一步降到 .80928，而背景 .98558，展示了不同类别边界受采样影响不同。","sha256":"9412c9cf2be0c73ea8850a70b998b42219a9f8baf916c61ba9a7c9d760da4526","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-16412ad68e504e8f9b564ed686a53b4c","title":"已完成结果：复杂模型没有被安排成赢家","number":8},"sectionTitle":"已完成结果：复杂模型没有被安排成赢家","currentQuestion":"已完成结果：复杂模型没有被安排成赢家","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-22cc4932bbd5abc49518f849","nextBlock":"b-4f46516b8a37deaa768a9cc6","prerequisites":[{"id":"b-dffa3ed1f697cfcf9b14bef3","url":"#b-dffa3ed1f697cfcf9b14bef3","role":"section-title"},{"id":"b-e60a420c4bd5de51186234ca","url":"#b-e60a420c4bd5de51186234ca","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-4f46516b8a37deaa768a9cc6","type":"p","scope":"block-16412ad68e504e8f9b564ed686a53b4c","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-4f46516b8a37deaa768a9cc6","content":"![小对象条件](/assets/display/a3b94d7df0f7bd4472d4f87d.webp)","sha256":"cef1fd6369aabb1d23e9ec0152605ca225c6913875d83c223eae49ad8214d1d2","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-16412ad68e504e8f9b564ed686a53b4c","title":"已完成结果：复杂模型没有被安排成赢家","number":8},"sectionTitle":"已完成结果：复杂模型没有被安排成赢家","currentQuestion":"已完成结果：复杂模型没有被安排成赢家","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-e2123c4f4809a1a7db16c6f7","nextBlock":"b-0c0a6e8cca51cb76af9bc5c7","prerequisites":[{"id":"b-dffa3ed1f697cfcf9b14bef3","url":"#b-dffa3ed1f697cfcf9b14bef3","role":"section-title"},{"id":"b-e60a420c4bd5de51186234ca","url":"#b-e60a420c4bd5de51186234ca","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-0c0a6e8cca51cb76af9bc5c7","type":"p","scope":"block-16412ad68e504e8f9b564ed686a53b4c","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-0c0a6e8cca51cb76af9bc5c7","content":"下一次只把训练增强加入模糊，保持场景、epoch 和网络不变，再看“干净图/模糊图”两列是否同时改善。若想检验颜色捷径，应重新定义颜色与类别的生成关系并同时调整训练与测试协议；不能把标签含义改变的分布转移误说成边界采样问题。","sha256":"872af66a9cbfc66762f9bf89802b01cd9d1317d99427da3c4957ed638521532a","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-16412ad68e504e8f9b564ed686a53b4c","title":"已完成结果：复杂模型没有被安排成赢家","number":8},"sectionTitle":"已完成结果：复杂模型没有被安排成赢家","currentQuestion":"已完成结果：复杂模型没有被安排成赢家","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-4f46516b8a37deaa768a9cc6","nextBlock":null,"prerequisites":[{"id":"b-dffa3ed1f697cfcf9b14bef3","url":"#b-dffa3ed1f697cfcf9b14bef3","role":"section-title"},{"id":"b-e60a420c4bd5de51186234ca","url":"#b-e60a420c4bd5de51186234ca","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-7e60f118b29b2cca5daf9d05","type":"h2","scope":"block-365db128e760487bbb6de81c4068f3a7","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-7e60f118b29b2cca5daf9d05","content":"## 来源与结构输出的连接","sha256":"96b5617dd1b75d91c269215ecedcbf9a577b0f5f72047a0da9474c2f4901f298","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-365db128e760487bbb6de81c4068f3a7","title":"来源与结构输出的连接","number":9},"sectionTitle":"来源与结构输出的连接","currentQuestion":"来源与结构输出的连接","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-017aa63e72565d4144de92c2","prerequisites":[{"id":"b-017aa63e72565d4144de92c2","url":"#b-017aa63e72565d4144de92c2","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-017aa63e72565d4144de92c2","type":"p","scope":"block-365db128e760487bbb6de81c4068f3a7","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-017aa63e72565d4144de92c2","content":"2026-09-22 实时核验 [D2L §14.11 Fully Convolutional Networks](https://d2l.ai/chapter_computer-vision/fcn.html)，采用全卷积逐像素读出、上采样和双线性坐标的解释；本实现使用可学习粗/细分支加双线性插值，没有预训练骨干，也没有宣称复现其 VOC 实验。ignore、三类混淆矩阵、两个颜色场景和条件对照是本课程的独立教学构造。","sha256":"704681ab580f1aba8abf702f224a6393f184b62c6bc8c2aebd06660b7039e0a8","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-365db128e760487bbb6de81c4068f3a7","title":"来源与结构输出的连接","number":9},"sectionTitle":"来源与结构输出的连接","currentQuestion":"来源与结构输出的连接","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-7e60f118b29b2cca5daf9d05","nextBlock":"b-912381ba1b63c7aa88cab4f6","prerequisites":[{"id":"b-7e60f118b29b2cca5daf9d05","url":"#b-7e60f118b29b2cca5daf9d05","role":"section-title"}],"relatedBlocks":[]},{"id":"b-912381ba1b63c7aa88cab4f6","type":"p","scope":"block-365db128e760487bbb6de81c4068f3a7","url":"https://codingai-lec03.pages.dev/course/notebooks/9e268706471944e3a59e6f568f9ce9a3.html#b-912381ba1b63c7aa88cab4f6","content":"LAB10 中检测框正确只说明包围区域满足评价阈值。LAB11 中椭圆边缘、相邻对象间的背景缝、未标注像素仍是不同问题：输出粒度决定什么算错误，采样与任务头决定哪些空间信息能留下。返回网页的空间主线时，可以用本册三张同源输入/目标/错误图说明这一步转折，而不只说“语义分割更精细”。","sha256":"986aeb0d9133f40c4ba6c833a309426dce10edbd3c280d3d5f7969b14e818b23","chapter":{"id":"II","title":"区域、像素与实例"},"unit":{"id":"pixel-prediction-objective","title":"怎样直接学习一张像素类别地图？"},"page":{"id":"reading-block-365db128e760487bbb6de81c4068f3a7","title":"来源与结构输出的连接","number":9},"sectionTitle":"来源与结构输出的连接","currentQuestion":"来源与结构输出的连接","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-017aa63e72565d4144de92c2","nextBlock":null,"prerequisites":[{"id":"b-7e60f118b29b2cca5daf9d05","url":"#b-7e60f118b29b2cca5daf9d05","role":"section-title"},{"id":"b-017aa63e72565d4144de92c2","url":"#b-017aa63e72565d4144de92c2","role":"problem-context"}],"relatedBlocks":[]}]}
