[{"data":1,"prerenderedAt":11099},["ShallowReactive",2],{"article-\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F05.AI-相册识别原理，一句话搜图是怎么做到的":3,"article-around-\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F05.AI-相册识别原理，一句话搜图是怎么做到的":10877},{"id":4,"title":5,"author":6,"body":7,"category":10861,"cover":10862,"date":10863,"description":10864,"draft":10865,"extension":10866,"image":10867,"license":10862,"meta":10868,"minutes":10869,"navigation":10870,"path":10871,"pinned":10865,"seo":10872,"stem":10873,"tags":10874,"__hash__":10876},"blog\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F05.AI 相册识别原理，一句话搜图是怎么做到的.md","AI 相册识别原理，一句话搜图是怎么做到的","张萌萌",{"type":8,"value":9,"toc":10827},"minimark",[10,15,24,37,44,100,115,119,122,133,136,154,158,165,260,265,272,1106,1559,1630,1633,1821,2102,2455,2791,3062,3065,3250,3542,3878,4144,4286,4392,4715,4871,4886,4890,4897,5134,5439,5863,6219,6261,6601,6607,6622,6626,6632,6806,6813,6817,6821,6835,6855,6862,6866,6869,6882,6893,6897,6900,6991,7002,7006,7009,7021,7032,7036,7086,7092,7096,7102,7106,7109,7130,7194,7526,7621,7625,7628,7634,7641,7645,7648,7654,7658,7661,7672,7679,7683,7690,7697,8686,8957,8961,8968,8975,8978,8984,8988,8991,9016,9019,9027,9124,9296,9493,9497,9504,9515,9752,9909,9912,10388,10395,10471,10474,10478,10591,10594,10618,10622,10629,10632,10678,10681,10701,10705,10708,10740,10743,10747,10777,10780,10824],[11,12,14],"h2",{"id":13},"_1-序言先看它解决了什么问题","1 序言：先看它解决了什么问题",[16,17,18,19,23],"p",{},"自部署相册（Immich、MT Photos、飞牛相册）这两年集体上线了一个能力：",[20,21,22],"strong",{},"不用翻文件夹、不用记文件名，输入一句话就能把照片捞出来","。",[25,26,27,31,34],"ul",{},[28,29,30],"li",{},"在搜索框输入「灯火通明的街道」，能返回对应照片；",[28,32,33],{},"输入「海边看日落」，能跨过所有相册把场景找齐；",[28,35,36],{},"相册自动把同一个人的照片聚合在一起，生成「人物相册」，点开就是 TA 从小到大的记录。",[16,38,39,40,43],{},"这套能力背后不是某个单一模型，而是",[20,41,42],{},"两类模型 + 一套检索基础设施","的分工：",[45,46,47,63],"table",{},[48,49,50],"thead",{},[51,52,53,57,60],"tr",{},[54,55,56],"th",{},"能力",[54,58,59],{},"用的模型",[54,61,62],{},"回答的问题",[64,65,66,78,89],"tbody",{},[51,67,68,72,75],{},[69,70,71],"td",{},"语义搜图",[69,73,74],{},"CLIP 双塔模型",[69,76,77],{},"一句话和一张图「像不像」",[51,79,80,83,86],{},[69,81,82],{},"人物相册",[69,84,85],{},"人脸检测 + 人脸识别 + 聚类",[69,87,88],{},"两张脸是不是同一个人",[51,90,91,94,97],{},[69,92,93],{},"向量检索",[69,95,96],{},"pgvector \u002F VectorChord 等",[69,98,99],{},"百万向量里怎么快速找最近的",[16,101,102,103,106,107,110,111,114],{},"先说一个很多人会问的问题：",[20,104,105],{},"这背后是信号系统还是傅里叶变换？"," 答案在第三章，都不是 —— 真正的主角是线性代数里的",[20,108,109],{},"向量内积","和机器学习里的",[20,112,113],{},"对比学习","。傅里叶在这条链路里确实存在，但它管的是 JPEG 压缩，不负责「理解」。",[11,116,118],{"id":117},"_2-全局架构三套件各司其职","2 全局架构：三套件各司其职",[16,120,121],{},"先看一张总图，把整条链路串起来：",[123,124,129],"pre",{"className":125,"code":127,"language":128},[126],"language-text","                     ┌────────────────────────────────────┐\n                     │            本地推理服务             │\n 照片入库             │                                    │\n  │ 扫描 + 生成预览图  │   CLIP 图像编码器 ──► 图像向量(512维) │\n  ▼                  │  人脸检测\u002F对齐\u002F特征 ─► 人脸向量(512维) │\n 图片库 ─────────────►│                                    │\n                     └──────────────┬─────────────────────┘\n                                    │ 写入\n                                    ▼\n                          向量存储（pgvector 等）\n                                    ▲\n 用户输入「海边看日落」              │ 查询\n   ──► CLIP 文本编码器 ──► 文本向量 ─┘\n          │\n          ▼\n  余弦相似度排序，取 top-k 返回\n","text",[130,131,127],"code",{"__ignoreMap":132},"",[16,134,135],{},"两个要点：",[25,137,138,148],{},[28,139,140,143,144,147],{},[20,141,142],{},"离线阶段把图「翻译」成向量","。照片入库时先跑一遍推理，把每张图变成一串数字（embedding），存进数据库。用户搜索时",[20,145,146],{},"不用再碰原图","，只做向量计算。",[28,149,150,153],{},[20,151,152],{},"全程本地推理","。三个产品的模型都跑在 NAS 自己的 CPU\u002FGPU 上，照片不出内网 —— 这是自部署相册相对 iCloud\u002FGoogle Photos 的核心差异。",[11,155,157],{"id":156},"_3-数学内核不是信号系统也不是傅里叶变换","3 数学内核：不是信号系统，也不是傅里叶变换",[16,159,160,161,164],{},"先直接回答标题里的问题。\n",[20,162,163],{},"AI 相册的数学核心不是傅里叶变换，也不是经典信号处理，而是四件事：向量内积、对比学习、仿射变换、密度聚类。"," 它们恰好分布在链路的不同环节：",[45,166,167,180],{},[48,168,169],{},[51,170,171,174,177],{},[54,172,173],{},"数学工具",[54,175,176],{},"用在哪",[54,178,179],{},"管什么",[64,181,182,193,204,215,226,240,251],{},[51,183,184,187,190],{},[69,185,186],{},"余弦相似度 \u002F 向量内积",[69,188,189],{},"语义检索、人脸对比",[69,191,192],{},"「像不像」的量化度量",[51,194,195,198,201],{},[69,196,197],{},"对比学习（InfoNCE 损失）",[69,199,200],{},"CLIP 模型训练",[69,202,203],{},"学出一个「语义即距离」的向量空间",[51,205,206,209,212],{},[69,207,208],{},"仿射 \u002F 相似变换",[69,210,211],{},"人脸对齐",[69,213,214],{},"把歪着的脸几何摆正",[51,216,217,220,223],{},[69,218,219],{},"密度聚类（DBSCAN）",[69,221,222],{},"人物相册聚合",[69,224,225],{},"无监督地把人脸自动分组",[51,227,228,231,234],{},[69,229,230],{},"DCT（离散余弦变换，傅里叶家族）",[69,232,233],{},"JPEG\u002FWebP 压缩、缩略图",[69,235,236,237],{},"频域压缩，",[20,238,239],{},"不参与语义理解",[51,241,242,245,248],{},[69,243,244],{},"卷积（CNN 内部）",[69,246,247],{},"图像编码器",[69,249,250],{},"可学习的局部特征提取",[51,252,253,256,258],{},[69,254,255],{},"下面把每个公式讲透，都是从「一张图 = 一个向量」这个起点推导出来的。",[69,257],{},[69,259],{},[261,262,264],"h3",{"id":263},"_31-余弦相似度相册里出现频率最高的公式","3.1 余弦相似度：相册里出现频率最高的公式",[16,266,267,268,271],{},"一切的起点是：",[20,269,270],{},"把图、句子、人脸都表示成向量","。有了向量，相似度就有了统一的度量 —— 夹角余弦：",[16,273,274],{},[275,276,279,422],"span",{"className":277},[278],"katex",[275,280,283],{"className":281},[282],"katex-mathml",[284,285,287],"math",{"xmlns":286},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[288,289,290,417],"semantics",{},[291,292,293,297,301,305,308,311,314,346,348],"mrow",{},[294,295,296],"mi",{},"cos",[298,299,300],"mo",{},"⁡",[298,302,304],{"stretchy":303},"false","(",[294,306,307],{},"θ",[298,309,310],{"stretchy":303},")",[298,312,313],{},"=",[315,316,317,328],"mfrac",{},[291,318,319,322,325],{},[294,320,321],{},"a",[298,323,324],{},"⋅",[294,326,327],{},"b",[291,329,330,334,336,338,340,342,344],{},[294,331,333],{"mathvariant":332},"normal","∥",[294,335,321],{},[294,337,333],{"mathvariant":332},[298,339,324],{},[294,341,333],{"mathvariant":332},[294,343,327],{},[294,345,333],{"mathvariant":332},[298,347,313],{},[315,349,350,373],{},[291,351,352,361,367],{},[353,354,355,358],"msub",{},[298,356,357],{},"∑",[294,359,360],{},"i",[353,362,363,365],{},[294,364,321],{},[294,366,360],{},[353,368,369,371],{},[294,370,327],{},[294,372,360],{},[291,374,375,397,399],{},[376,377,378],"msqrt",{},[291,379,380,386],{},[353,381,382,384],{},[298,383,357],{},[294,385,360],{},[387,388,389,391,393],"msubsup",{},[294,390,321],{},[294,392,360],{},[394,395,396],"mn",{},"2",[298,398,324],{},[376,400,401],{},[291,402,403,409],{},[353,404,405,407],{},[298,406,357],{},[294,408,360],{},[387,410,411,413,415],{},[294,412,327],{},[294,414,360],{},[394,416,396],{},[418,419,421],"annotation",{"encoding":420},"application\u002Fx-tex","\\cos(\\theta) = \\frac{a \\cdot b}{\\|a\\| \\cdot \\|b\\|} = \\frac{\\sum_i a_i b_i}{\\sqrt{\\sum_i a_i^2} \\cdot \\sqrt{\\sum_i b_i^2}}",[275,423,427,466,595],{"className":424,"ariaHidden":426},[425],"katex-html","true",[275,428,431,436,440,444,450,454,459,463],{"className":429},[430],"base",[275,432],{"className":433,"style":435},[434],"strut","height:1em;vertical-align:-0.25em;",[275,437,296],{"className":438},[439],"mop",[275,441,304],{"className":442},[443],"mopen",[275,445,307],{"className":446,"style":449},[447,448],"mord","mathnormal","margin-right:0.0278em;",[275,451,310],{"className":452},[453],"mclose",[275,455],{"className":456,"style":458},[457],"mspace","margin-right:0.2778em;",[275,460,313],{"className":461},[462],"mrel",[275,464],{"className":465,"style":458},[457],[275,467,469,473,586,589,592],{"className":468},[430],[275,470],{"className":471,"style":472},[434],"height:1.4001em;vertical-align:-0.52em;",[275,474,476,480,583],{"className":475},[447],[275,477],{"className":478},[443,479],"nulldelimiter",[275,481,483],{"className":482},[315],[275,484,488,574],{"className":485},[486,487],"vlist-t","vlist-t2",[275,489,492,569],{"className":490},[491],"vlist-r",[275,493,497,537,548],{"className":494,"style":496},[495],"vlist","height:0.8801em;",[275,498,500,505],{"style":499},"top:-2.655em;",[275,501],{"className":502,"style":504},[503],"pstrut","height:3em;",[275,506,512],{"className":507},[508,509,510,511],"sizing","reset-size6","size3","mtight",[275,513,515,518,521,524,528,531,534],{"className":514},[447,511],[275,516,333],{"className":517},[447,511],[275,519,321],{"className":520},[447,448,511],[275,522,333],{"className":523},[447,511],[275,525,324],{"className":526},[527,511],"mbin",[275,529,333],{"className":530},[447,511],[275,532,327],{"className":533},[447,448,511],[275,535,333],{"className":536},[447,511],[275,538,540,543],{"style":539},"top:-3.23em;",[275,541],{"className":542,"style":504},[503],[275,544],{"className":545,"style":547},[546],"frac-line","border-bottom-width:0.04em;",[275,549,551,554],{"style":550},"top:-3.394em;",[275,552],{"className":553,"style":504},[503],[275,555,557],{"className":556},[508,509,510,511],[275,558,560,563,566],{"className":559},[447,511],[275,561,321],{"className":562},[447,448,511],[275,564,324],{"className":565},[527,511],[275,567,327],{"className":568},[447,448,511],[275,570,573],{"className":571},[572],"vlist-s","​",[275,575,577],{"className":576},[491],[275,578,581],{"className":579,"style":580},[495],"height:0.52em;",[275,582],{},[275,584],{"className":585},[453,479],[275,587],{"className":588,"style":458},[457],[275,590,313],{"className":591},[462],[275,593],{"className":594,"style":458},[457],[275,596,598,602],{"className":597},[430],[275,599],{"className":600,"style":601},[434],"height:1.8896em;vertical-align:-0.8296em;",[275,603,605,608,1103],{"className":604},[447],[275,606],{"className":607},[443,479],[275,609,611],{"className":610},[315],[275,612,614,1094],{"className":613},[486,487],[275,615,617,1091],{"className":616},[491],[275,618,621,945,953],{"className":619,"style":620},[495],"height:1.06em;",[275,622,624,627],{"style":623},"top:-2.4702em;",[275,625],{"className":626,"style":504},[503],[275,628,630],{"className":629},[508,509,510,511],[275,631,633,804,807],{"className":632},[447,511],[275,634,637],{"className":635},[447,636,511],"sqrt",[275,638,640,795],{"className":639},[486,487],[275,641,643,792],{"className":642},[491],[275,644,647,769],{"className":645,"style":646},[495],"height:1.0283em;",[275,648,652,656],{"className":649,"style":651},[650],"svg-align","top:-3.4286em;",[275,653],{"className":654,"style":655},[503],"height:3.4286em;",[275,657,660,710,714],{"className":658,"style":659},[447,511],"padding-left:1.19em;",[275,661,663,669],{"className":662},[439,511],[275,664,357],{"className":665,"style":668},[439,666,667,511],"op-symbol","small-op","position:relative;top:0em;",[275,670,673],{"className":671},[672],"msupsub",[275,674,676,701],{"className":675},[486,487],[275,677,679,698],{"className":678},[491],[275,680,683],{"className":681,"style":682},[495],"height:0.1496em;",[275,684,686,690],{"style":685},"top:-2.1786em;margin-left:0em;margin-right:0.0714em;",[275,687],{"className":688,"style":689},[503],"height:2.5em;",[275,691,695],{"className":692},[508,693,694,511],"reset-size3","size1",[275,696,360],{"className":697},[447,448,511],[275,699,573],{"className":700},[572],[275,702,704],{"className":703},[491],[275,705,708],{"className":706,"style":707},[495],"height:0.3214em;",[275,709],{},[275,711],{"className":712,"style":713},[457,511],"margin-right:0.1952em;",[275,715,717,720],{"className":716},[447,511],[275,718,321],{"className":719},[447,448,511],[275,721,723],{"className":722},[672],[275,724,726,760],{"className":725},[486,487],[275,727,729,757],{"className":728},[491],[275,730,733,745],{"className":731,"style":732},[495],"height:0.8051em;",[275,734,736,739],{"style":735},"top:-2.1777em;margin-left:0em;margin-right:0.0714em;",[275,737],{"className":738,"style":689},[503],[275,740,742],{"className":741},[508,693,694,511],[275,743,360],{"className":744},[447,448,511],[275,746,748,751],{"style":747},"top:-2.8448em;margin-right:0.0714em;",[275,749],{"className":750,"style":689},[503],[275,752,754],{"className":753},[508,693,694,511],[275,755,396],{"className":756},[447,511],[275,758,573],{"className":759},[572],[275,761,763],{"className":762},[491],[275,764,767],{"className":765,"style":766},[495],"height:0.3223em;",[275,768],{},[275,770,772,775],{"style":771},"top:-3.0003em;",[275,773],{"className":774,"style":655},[503],[275,776,780],{"className":777,"style":779},[778,511],"hide-tail","min-width:0.853em;height:1.5429em;",[781,782,788],"svg",{"xmlns":783,"width":784,"height":785,"viewBox":786,"preserveAspectRatio":787},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","400em","1.5429em","0 0 400000 1080","xMinYMin slice",[789,790],"path",{"d":791},"M95,702\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl0 -0\nc5.3,-9.3,12,-14,20,-14\nH400000v40H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM834 80h400000v40h-400000z",[275,793,573],{"className":794},[572],[275,796,798],{"className":797},[491],[275,799,802],{"className":800,"style":801},[495],"height:0.4282em;",[275,803],{},[275,805,324],{"className":806},[527,511],[275,808,810],{"className":809},[447,636,511],[275,811,813,937],{"className":812},[486,487],[275,814,816,934],{"className":815},[491],[275,817,819,922],{"className":818,"style":646},[495],[275,820,822,825],{"className":821,"style":651},[650],[275,823],{"className":824,"style":655},[503],[275,826,828,868,871],{"className":827,"style":659},[447,511],[275,829,831,834],{"className":830},[439,511],[275,832,357],{"className":833,"style":668},[439,666,667,511],[275,835,837],{"className":836},[672],[275,838,840,860],{"className":839},[486,487],[275,841,843,857],{"className":842},[491],[275,844,846],{"className":845,"style":682},[495],[275,847,848,851],{"style":685},[275,849],{"className":850,"style":689},[503],[275,852,854],{"className":853},[508,693,694,511],[275,855,360],{"className":856},[447,448,511],[275,858,573],{"className":859},[572],[275,861,863],{"className":862},[491],[275,864,866],{"className":865,"style":707},[495],[275,867],{},[275,869],{"className":870,"style":713},[457,511],[275,872,874,877],{"className":873},[447,511],[275,875,327],{"className":876},[447,448,511],[275,878,880],{"className":879},[672],[275,881,883,914],{"className":882},[486,487],[275,884,886,911],{"className":885},[491],[275,887,889,900],{"className":888,"style":732},[495],[275,890,891,894],{"style":735},[275,892],{"className":893,"style":689},[503],[275,895,897],{"className":896},[508,693,694,511],[275,898,360],{"className":899},[447,448,511],[275,901,902,905],{"style":747},[275,903],{"className":904,"style":689},[503],[275,906,908],{"className":907},[508,693,694,511],[275,909,396],{"className":910},[447,511],[275,912,573],{"className":913},[572],[275,915,917],{"className":916},[491],[275,918,920],{"className":919,"style":766},[495],[275,921],{},[275,923,924,927],{"style":771},[275,925],{"className":926,"style":655},[503],[275,928,930],{"className":929,"style":779},[778,511],[781,931,932],{"xmlns":783,"width":784,"height":785,"viewBox":786,"preserveAspectRatio":787},[789,933],{"d":791},[275,935,573],{"className":936},[572],[275,938,940],{"className":939},[491],[275,941,943],{"className":942,"style":801},[495],[275,944],{},[275,946,947,950],{"style":539},[275,948],{"className":949,"style":504},[503],[275,951],{"className":952,"style":547},[546],[275,954,956,959],{"style":955},"top:-3.535em;",[275,957],{"className":958,"style":504},[503],[275,960,962],{"className":961},[508,509,510,511],[275,963,965,1005,1008,1051],{"className":964},[447,511],[275,966,968,971],{"className":967},[439,511],[275,969,357],{"className":970,"style":668},[439,666,667,511],[275,972,974],{"className":973},[672],[275,975,977,997],{"className":976},[486,487],[275,978,980,994],{"className":979},[491],[275,981,983],{"className":982,"style":682},[495],[275,984,985,988],{"style":685},[275,986],{"className":987,"style":689},[503],[275,989,991],{"className":990},[508,693,694,511],[275,992,360],{"className":993},[447,448,511],[275,995,573],{"className":996},[572],[275,998,1000],{"className":999},[491],[275,1001,1003],{"className":1002,"style":707},[495],[275,1004],{},[275,1006],{"className":1007,"style":713},[457,511],[275,1009,1011,1014],{"className":1010},[447,511],[275,1012,321],{"className":1013},[447,448,511],[275,1015,1017],{"className":1016},[672],[275,1018,1020,1042],{"className":1019},[486,487],[275,1021,1023,1039],{"className":1022},[491],[275,1024,1027],{"className":1025,"style":1026},[495],"height:0.3281em;",[275,1028,1030,1033],{"style":1029},"top:-2.357em;margin-left:0em;margin-right:0.0714em;",[275,1031],{"className":1032,"style":689},[503],[275,1034,1036],{"className":1035},[508,693,694,511],[275,1037,360],{"className":1038},[447,448,511],[275,1040,573],{"className":1041},[572],[275,1043,1045],{"className":1044},[491],[275,1046,1049],{"className":1047,"style":1048},[495],"height:0.143em;",[275,1050],{},[275,1052,1054,1057],{"className":1053},[447,511],[275,1055,327],{"className":1056},[447,448,511],[275,1058,1060],{"className":1059},[672],[275,1061,1063,1083],{"className":1062},[486,487],[275,1064,1066,1080],{"className":1065},[491],[275,1067,1069],{"className":1068,"style":1026},[495],[275,1070,1071,1074],{"style":1029},[275,1072],{"className":1073,"style":689},[503],[275,1075,1077],{"className":1076},[508,693,694,511],[275,1078,360],{"className":1079},[447,448,511],[275,1081,573],{"className":1082},[572],[275,1084,1086],{"className":1085},[491],[275,1087,1089],{"className":1088,"style":1048},[495],[275,1090],{},[275,1092,573],{"className":1093},[572],[275,1095,1097],{"className":1096},[491],[275,1098,1101],{"className":1099,"style":1100},[495],"height:0.8296em;",[275,1102],{},[275,1104],{"className":1105},[453,479],[16,1107,1108,1109,1330,1331,1558],{},"其中 ",[275,1110,1112,1150],{"className":1111},[278],[275,1113,1115],{"className":1114},[282],[284,1116,1117],{"xmlns":286},[288,1118,1119,1147],{},[291,1120,1121,1123,1125,1127,1129,1135,1141],{},[294,1122,321],{},[298,1124,324],{},[294,1126,327],{},[298,1128,313],{},[353,1130,1131,1133],{},[298,1132,357],{},[294,1134,360],{},[353,1136,1137,1139],{},[294,1138,321],{},[294,1140,360],{},[353,1142,1143,1145],{},[294,1144,327],{},[294,1146,360],{},[418,1148,1149],{"encoding":420},"a \\cdot b = \\sum_i a_i b_i",[275,1151,1153,1173,1192],{"className":1152,"ariaHidden":426},[425],[275,1154,1156,1160,1163,1167,1170],{"className":1155},[430],[275,1157],{"className":1158,"style":1159},[434],"height:0.4445em;",[275,1161,321],{"className":1162},[447,448],[275,1164],{"className":1165,"style":1166},[457],"margin-right:0.2222em;",[275,1168,324],{"className":1169},[527],[275,1171],{"className":1172,"style":1166},[457],[275,1174,1176,1180,1183,1186,1189],{"className":1175},[430],[275,1177],{"className":1178,"style":1179},[434],"height:0.6944em;",[275,1181,327],{"className":1182},[447,448],[275,1184],{"className":1185,"style":458},[457],[275,1187,313],{"className":1188},[462],[275,1190],{"className":1191,"style":458},[457],[275,1193,1195,1199,1243,1247,1290],{"className":1194},[430],[275,1196],{"className":1197,"style":1198},[434],"height:1.0497em;vertical-align:-0.2997em;",[275,1200,1202,1205],{"className":1201},[439],[275,1203,357],{"className":1204,"style":668},[439,666,667],[275,1206,1208],{"className":1207},[672],[275,1209,1211,1234],{"className":1210},[486,487],[275,1212,1214,1231],{"className":1213},[491],[275,1215,1218],{"className":1216,"style":1217},[495],"height:0.162em;",[275,1219,1221,1225],{"style":1220},"top:-2.4003em;margin-left:0em;margin-right:0.05em;",[275,1222],{"className":1223,"style":1224},[503],"height:2.7em;",[275,1226,1228],{"className":1227},[508,509,510,511],[275,1229,360],{"className":1230},[447,448,511],[275,1232,573],{"className":1233},[572],[275,1235,1237],{"className":1236},[491],[275,1238,1241],{"className":1239,"style":1240},[495],"height:0.2997em;",[275,1242],{},[275,1244],{"className":1245,"style":1246},[457],"margin-right:0.1667em;",[275,1248,1250,1253],{"className":1249},[447],[275,1251,321],{"className":1252},[447,448],[275,1254,1256],{"className":1255},[672],[275,1257,1259,1281],{"className":1258},[486,487],[275,1260,1262,1278],{"className":1261},[491],[275,1263,1266],{"className":1264,"style":1265},[495],"height:0.3117em;",[275,1267,1269,1272],{"style":1268},"top:-2.55em;margin-left:0em;margin-right:0.05em;",[275,1270],{"className":1271,"style":1224},[503],[275,1273,1275],{"className":1274},[508,509,510,511],[275,1276,360],{"className":1277},[447,448,511],[275,1279,573],{"className":1280},[572],[275,1282,1284],{"className":1283},[491],[275,1285,1288],{"className":1286,"style":1287},[495],"height:0.15em;",[275,1289],{},[275,1291,1293,1296],{"className":1292},[447],[275,1294,327],{"className":1295},[447,448],[275,1297,1299],{"className":1298},[672],[275,1300,1302,1322],{"className":1301},[486,487],[275,1303,1305,1319],{"className":1304},[491],[275,1306,1308],{"className":1307,"style":1265},[495],[275,1309,1310,1313],{"style":1268},[275,1311],{"className":1312,"style":1224},[503],[275,1314,1316],{"className":1315},[508,509,510,511],[275,1317,360],{"className":1318},[447,448,511],[275,1320,573],{"className":1321},[572],[275,1323,1325],{"className":1324},[491],[275,1326,1328],{"className":1327,"style":1287},[495],[275,1329],{}," 是内积（对应分量相乘再求和），",[275,1332,1334,1372],{"className":1333},[278],[275,1335,1337],{"className":1336},[282],[284,1338,1339],{"xmlns":286},[288,1340,1341,1369],{},[291,1342,1343,1345,1347,1349,1351],{},[294,1344,333],{"mathvariant":332},[294,1346,321],{},[294,1348,333],{"mathvariant":332},[298,1350,313],{},[376,1352,1353],{},[291,1354,1355,1361],{},[353,1356,1357,1359],{},[298,1358,357],{},[294,1360,360],{},[387,1362,1363,1365,1367],{},[294,1364,321],{},[294,1366,360],{},[394,1368,396],{},[418,1370,1371],{"encoding":420},"\\|a\\| = \\sqrt{\\sum_i a_i^2}",[275,1373,1375,1399],{"className":1374,"ariaHidden":426},[425],[275,1376,1378,1381,1384,1387,1390,1393,1396],{"className":1377},[430],[275,1379],{"className":1380,"style":435},[434],[275,1382,333],{"className":1383},[447],[275,1385,321],{"className":1386},[447,448],[275,1388,333],{"className":1389},[447],[275,1391],{"className":1392,"style":458},[457],[275,1394,313],{"className":1395},[462],[275,1397],{"className":1398,"style":458},[457],[275,1400,1402,1406],{"className":1401},[430],[275,1403],{"className":1404,"style":1405},[434],"height:1.24em;vertical-align:-0.3069em;",[275,1407,1409],{"className":1408},[447,636],[275,1410,1412,1549],{"className":1411},[486,487],[275,1413,1415,1546],{"className":1414},[491],[275,1416,1419,1529],{"className":1417,"style":1418},[495],"height:0.9331em;",[275,1420,1423,1427],{"className":1421,"style":1422},[650],"top:-3.2em;",[275,1424],{"className":1425,"style":1426},[503],"height:3.2em;",[275,1428,1431,1471,1474],{"className":1429,"style":1430},[447],"padding-left:1em;",[275,1432,1434,1437],{"className":1433},[439],[275,1435,357],{"className":1436,"style":668},[439,666,667],[275,1438,1440],{"className":1439},[672],[275,1441,1443,1463],{"className":1442},[486,487],[275,1444,1446,1460],{"className":1445},[491],[275,1447,1449],{"className":1448,"style":1217},[495],[275,1450,1451,1454],{"style":1220},[275,1452],{"className":1453,"style":1224},[503],[275,1455,1457],{"className":1456},[508,509,510,511],[275,1458,360],{"className":1459},[447,448,511],[275,1461,573],{"className":1462},[572],[275,1464,1466],{"className":1465},[491],[275,1467,1469],{"className":1468,"style":1240},[495],[275,1470],{},[275,1472],{"className":1473,"style":1246},[457],[275,1475,1477,1480],{"className":1476},[447],[275,1478,321],{"className":1479},[447,448],[275,1481,1483],{"className":1482},[672],[275,1484,1486,1520],{"className":1485},[486,487],[275,1487,1489,1517],{"className":1488},[491],[275,1490,1493,1505],{"className":1491,"style":1492},[495],"height:0.7959em;",[275,1494,1496,1499],{"style":1495},"top:-2.4231em;margin-left:0em;margin-right:0.05em;",[275,1497],{"className":1498,"style":1224},[503],[275,1500,1502],{"className":1501},[508,509,510,511],[275,1503,360],{"className":1504},[447,448,511],[275,1506,1508,1511],{"style":1507},"top:-3.0448em;margin-right:0.05em;",[275,1509],{"className":1510,"style":1224},[503],[275,1512,1514],{"className":1513},[508,509,510,511],[275,1515,396],{"className":1516},[447,511],[275,1518,573],{"className":1519},[572],[275,1521,1523],{"className":1522},[491],[275,1524,1527],{"className":1525,"style":1526},[495],"height:0.2769em;",[275,1528],{},[275,1530,1532,1535],{"style":1531},"top:-2.8931em;",[275,1533],{"className":1534,"style":1426},[503],[275,1536,1539],{"className":1537,"style":1538},[778],"min-width:1.02em;height:1.28em;",[781,1540,1543],{"xmlns":783,"width":784,"height":1541,"viewBox":1542,"preserveAspectRatio":787},"1.28em","0 0 400000 1296",[789,1544],{"d":1545},"M263,681c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl0 -0\nc4.7,-7.3,11,-11,19,-11\nH40000v40H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM1001 80h400000v40h-400000z",[275,1547,573],{"className":1548},[572],[275,1550,1552],{"className":1551},[491],[275,1553,1556],{"className":1554,"style":1555},[495],"height:0.3069em;",[275,1557],{}," 是 L2 范数（向量的长度）。",[16,1560,1561,1562,1565,1566,1629],{},"几何含义：",[20,1563,1564],{},"两个向量夹角的余弦","。方向越一致，值越接近 1；方向越正交，越接近 0；方向相反，接近 -1。它天然在 ",[275,1567,1569,1598],{"className":1568},[278],[275,1570,1572],{"className":1571},[282],[284,1573,1574],{"xmlns":286},[288,1575,1576,1595],{},[291,1577,1578,1581,1584,1587,1590,1592],{},[298,1579,1580],{"stretchy":303},"[",[298,1582,1583],{},"−",[394,1585,1586],{},"1",[298,1588,1589],{"separator":426},",",[394,1591,1586],{},[298,1593,1594],{"stretchy":303},"]",[418,1596,1597],{"encoding":420},"[-1, 1]",[275,1599,1601],{"className":1600,"ariaHidden":426},[425],[275,1602,1604,1607,1610,1613,1616,1620,1623,1626],{"className":1603},[430],[275,1605],{"className":1606,"style":435},[434],[275,1608,1580],{"className":1609},[443],[275,1611,1583],{"className":1612},[447],[275,1614,1586],{"className":1615},[447],[275,1617,1589],{"className":1618},[1619],"mpunct",[275,1621],{"className":1622,"style":1246},[457],[275,1624,1586],{"className":1625},[447],[275,1627,1594],{"className":1628},[453],"，不随向量长度变化 —— 这正是我们要的：判断「语义像不像」只关心方向，不关心图的亮度、对比度这类幅度信息。",[16,1631,1632],{},"举个 3 维的数值例子（真实系统是 512 维，道理一样）。两张同一个人的人脸向量：",[16,1634,1635],{},[275,1636,1638,1705],{"className":1637},[278],[275,1639,1641],{"className":1640},[282],[284,1642,1643],{"xmlns":286},[288,1644,1645,1702],{},[291,1646,1647,1649,1651,1653,1656,1658,1662,1665,1667,1669,1672,1674,1677,1679,1681,1683,1686,1688,1690,1693,1695,1697,1700],{},[294,1648,321],{},[298,1650,313],{},[298,1652,304],{"stretchy":303},[394,1654,1655],{},"0.8",[298,1657,1589],{"separator":426},[1659,1660,1661],"mtext",{}," ",[394,1663,1664],{},"0.5",[298,1666,1589],{"separator":426},[1659,1668,1661],{},[394,1670,1671],{},"0.2",[298,1673,310],{"stretchy":303},[457,1675],{"width":1676},"2em",[294,1678,327],{},[298,1680,313],{},[298,1682,304],{"stretchy":303},[394,1684,1685],{},"0.7",[298,1687,1589],{"separator":426},[1659,1689,1661],{},[394,1691,1692],{},"0.6",[298,1694,1589],{"separator":426},[1659,1696,1661],{},[394,1698,1699],{},"0.1",[298,1701,310],{"stretchy":303},[418,1703,1704],{"encoding":420},"a = (0.8,\\ 0.5,\\ 0.2) \\qquad b = (0.7,\\ 0.6,\\ 0.1)",[275,1706,1708,1727,1782],{"className":1707,"ariaHidden":426},[425],[275,1709,1711,1715,1718,1721,1724],{"className":1710},[430],[275,1712],{"className":1713,"style":1714},[434],"height:0.4306em;",[275,1716,321],{"className":1717},[447,448],[275,1719],{"className":1720,"style":458},[457],[275,1722,313],{"className":1723},[462],[275,1725],{"className":1726,"style":458},[457],[275,1728,1730,1733,1736,1739,1742,1745,1748,1751,1754,1757,1760,1763,1766,1770,1773,1776,1779],{"className":1729},[430],[275,1731],{"className":1732,"style":435},[434],[275,1734,304],{"className":1735},[443],[275,1737,1655],{"className":1738},[447],[275,1740,1589],{"className":1741},[1619],[275,1743,1661],{"className":1744},[457],[275,1746],{"className":1747,"style":1246},[457],[275,1749,1664],{"className":1750},[447],[275,1752,1589],{"className":1753},[1619],[275,1755,1661],{"className":1756},[457],[275,1758],{"className":1759,"style":1246},[457],[275,1761,1671],{"className":1762},[447],[275,1764,310],{"className":1765},[453],[275,1767],{"className":1768,"style":1769},[457],"margin-right:2em;",[275,1771,327],{"className":1772},[447,448],[275,1774],{"className":1775,"style":458},[457],[275,1777,313],{"className":1778},[462],[275,1780],{"className":1781,"style":458},[457],[275,1783,1785,1788,1791,1794,1797,1800,1803,1806,1809,1812,1815,1818],{"className":1784},[430],[275,1786],{"className":1787,"style":435},[434],[275,1789,304],{"className":1790},[443],[275,1792,1685],{"className":1793},[447],[275,1795,1589],{"className":1796},[1619],[275,1798,1661],{"className":1799},[457],[275,1801],{"className":1802,"style":1246},[457],[275,1804,1692],{"className":1805},[447],[275,1807,1589],{"className":1808},[1619],[275,1810,1661],{"className":1811},[457],[275,1813],{"className":1814,"style":1246},[457],[275,1816,1699],{"className":1817},[447],[275,1819,310],{"className":1820},[453],[16,1822,1823],{},[275,1824,1826,1890],{"className":1825},[278],[275,1827,1829],{"className":1828},[282],[284,1830,1831],{"xmlns":286},[288,1832,1833,1887],{},[291,1834,1835,1837,1839,1841,1843,1845,1848,1850,1853,1855,1857,1859,1861,1863,1865,1867,1869,1872,1874,1877,1879,1882,1884],{},[294,1836,321],{},[298,1838,324],{},[294,1840,327],{},[298,1842,313],{},[394,1844,1655],{},[298,1846,1847],{},"×",[394,1849,1685],{},[298,1851,1852],{},"+",[394,1854,1664],{},[298,1856,1847],{},[394,1858,1692],{},[298,1860,1852],{},[394,1862,1671],{},[298,1864,1847],{},[394,1866,1699],{},[298,1868,313],{},[394,1870,1871],{},"0.56",[298,1873,1852],{},[394,1875,1876],{},"0.30",[298,1878,1852],{},[394,1880,1881],{},"0.02",[298,1883,313],{},[394,1885,1886],{},"0.88",[418,1888,1889],{"encoding":420},"a \\cdot b = 0.8 \\times 0.7 + 0.5 \\times 0.6 + 0.2 \\times 0.1 = 0.56 + 0.30 + 0.02 = 0.88\n",[275,1891,1893,1911,1929,1948,1966,1984,2002,2020,2039,2057,2075,2093],{"className":1892,"ariaHidden":426},[425],[275,1894,1896,1899,1902,1905,1908],{"className":1895},[430],[275,1897],{"className":1898,"style":1159},[434],[275,1900,321],{"className":1901},[447,448],[275,1903],{"className":1904,"style":1166},[457],[275,1906,324],{"className":1907},[527],[275,1909],{"className":1910,"style":1166},[457],[275,1912,1914,1917,1920,1923,1926],{"className":1913},[430],[275,1915],{"className":1916,"style":1179},[434],[275,1918,327],{"className":1919},[447,448],[275,1921],{"className":1922,"style":458},[457],[275,1924,313],{"className":1925},[462],[275,1927],{"className":1928,"style":458},[457],[275,1930,1932,1936,1939,1942,1945],{"className":1931},[430],[275,1933],{"className":1934,"style":1935},[434],"height:0.7278em;vertical-align:-0.0833em;",[275,1937,1655],{"className":1938},[447],[275,1940],{"className":1941,"style":1166},[457],[275,1943,1847],{"className":1944},[527],[275,1946],{"className":1947,"style":1166},[457],[275,1949,1951,1954,1957,1960,1963],{"className":1950},[430],[275,1952],{"className":1953,"style":1935},[434],[275,1955,1685],{"className":1956},[447],[275,1958],{"className":1959,"style":1166},[457],[275,1961,1852],{"className":1962},[527],[275,1964],{"className":1965,"style":1166},[457],[275,1967,1969,1972,1975,1978,1981],{"className":1968},[430],[275,1970],{"className":1971,"style":1935},[434],[275,1973,1664],{"className":1974},[447],[275,1976],{"className":1977,"style":1166},[457],[275,1979,1847],{"className":1980},[527],[275,1982],{"className":1983,"style":1166},[457],[275,1985,1987,1990,1993,1996,1999],{"className":1986},[430],[275,1988],{"className":1989,"style":1935},[434],[275,1991,1692],{"className":1992},[447],[275,1994],{"className":1995,"style":1166},[457],[275,1997,1852],{"className":1998},[527],[275,2000],{"className":2001,"style":1166},[457],[275,2003,2005,2008,2011,2014,2017],{"className":2004},[430],[275,2006],{"className":2007,"style":1935},[434],[275,2009,1671],{"className":2010},[447],[275,2012],{"className":2013,"style":1166},[457],[275,2015,1847],{"className":2016},[527],[275,2018],{"className":2019,"style":1166},[457],[275,2021,2023,2027,2030,2033,2036],{"className":2022},[430],[275,2024],{"className":2025,"style":2026},[434],"height:0.6444em;",[275,2028,1699],{"className":2029},[447],[275,2031],{"className":2032,"style":458},[457],[275,2034,313],{"className":2035},[462],[275,2037],{"className":2038,"style":458},[457],[275,2040,2042,2045,2048,2051,2054],{"className":2041},[430],[275,2043],{"className":2044,"style":1935},[434],[275,2046,1871],{"className":2047},[447],[275,2049],{"className":2050,"style":1166},[457],[275,2052,1852],{"className":2053},[527],[275,2055],{"className":2056,"style":1166},[457],[275,2058,2060,2063,2066,2069,2072],{"className":2059},[430],[275,2061],{"className":2062,"style":1935},[434],[275,2064,1876],{"className":2065},[447],[275,2067],{"className":2068,"style":1166},[457],[275,2070,1852],{"className":2071},[527],[275,2073],{"className":2074,"style":1166},[457],[275,2076,2078,2081,2084,2087,2090],{"className":2077},[430],[275,2079],{"className":2080,"style":2026},[434],[275,2082,1881],{"className":2083},[447],[275,2085],{"className":2086,"style":458},[457],[275,2088,313],{"className":2089},[462],[275,2091],{"className":2092,"style":458},[457],[275,2094,2096,2099],{"className":2095},[430],[275,2097],{"className":2098,"style":2026},[434],[275,2100,1886],{"className":2101},[447],[16,2103,2104],{},[275,2105,2107,2167],{"className":2106},[278],[275,2108,2110],{"className":2109},[282],[284,2111,2112],{"xmlns":286},[288,2113,2114,2164],{},[291,2115,2116,2118,2120,2122,2124,2151,2153,2158,2161],{},[294,2117,333],{"mathvariant":332},[294,2119,321],{},[294,2121,333],{"mathvariant":332},[298,2123,313],{},[376,2125,2126],{},[291,2127,2128,2135,2137,2143,2145],{},[2129,2130,2131,2133],"msup",{},[394,2132,1655],{},[394,2134,396],{},[298,2136,1852],{},[2129,2138,2139,2141],{},[394,2140,1664],{},[394,2142,396],{},[298,2144,1852],{},[2129,2146,2147,2149],{},[394,2148,1671],{},[394,2150,396],{},[298,2152,313],{},[376,2154,2155],{},[394,2156,2157],{},"0.93",[298,2159,2160],{},"≈",[394,2162,2163],{},"0.964",[418,2165,2166],{"encoding":420},"\\|a\\| = \\sqrt{0.8^2 + 0.5^2 + 0.2^2} = \\sqrt{0.93} \\approx 0.964",[275,2168,2170,2194,2380,2446],{"className":2169,"ariaHidden":426},[425],[275,2171,2173,2176,2179,2182,2185,2188,2191],{"className":2172},[430],[275,2174],{"className":2175,"style":435},[434],[275,2177,333],{"className":2178},[447],[275,2180,321],{"className":2181},[447,448],[275,2183,333],{"className":2184},[447],[275,2186],{"className":2187,"style":458},[457],[275,2189,313],{"className":2190},[462],[275,2192],{"className":2193,"style":458},[457],[275,2195,2197,2201,2371,2374,2377],{"className":2196},[430],[275,2198],{"className":2199,"style":2200},[434],"height:1.04em;vertical-align:-0.1266em;",[275,2202,2204],{"className":2203},[447,636],[275,2205,2207,2362],{"className":2206},[486,487],[275,2208,2210,2359],{"className":2209},[491],[275,2211,2214,2344],{"className":2212,"style":2213},[495],"height:0.9134em;",[275,2215,2218,2221],{"className":2216,"style":2217},[650],"top:-3em;",[275,2219],{"className":2220,"style":504},[503],[275,2222,2225,2229,2261,2264,2267,2270,2273,2303,2306,2309,2312,2315],{"className":2223,"style":2224},[447],"padding-left:0.833em;",[275,2226,2228],{"className":2227},[447],"0.",[275,2230,2232,2236],{"className":2231},[447],[275,2233,2235],{"className":2234},[447],"8",[275,2237,2239],{"className":2238},[672],[275,2240,2242],{"className":2241},[486],[275,2243,2245],{"className":2244},[491],[275,2246,2249],{"className":2247,"style":2248},[495],"height:0.7401em;",[275,2250,2252,2255],{"style":2251},"top:-2.989em;margin-right:0.05em;",[275,2253],{"className":2254,"style":1224},[503],[275,2256,2258],{"className":2257},[508,509,510,511],[275,2259,396],{"className":2260},[447,511],[275,2262],{"className":2263,"style":1166},[457],[275,2265,1852],{"className":2266},[527],[275,2268],{"className":2269,"style":1166},[457],[275,2271,2228],{"className":2272},[447],[275,2274,2276,2280],{"className":2275},[447],[275,2277,2279],{"className":2278},[447],"5",[275,2281,2283],{"className":2282},[672],[275,2284,2286],{"className":2285},[486],[275,2287,2289],{"className":2288},[491],[275,2290,2292],{"className":2291,"style":2248},[495],[275,2293,2294,2297],{"style":2251},[275,2295],{"className":2296,"style":1224},[503],[275,2298,2300],{"className":2299},[508,509,510,511],[275,2301,396],{"className":2302},[447,511],[275,2304],{"className":2305,"style":1166},[457],[275,2307,1852],{"className":2308},[527],[275,2310],{"className":2311,"style":1166},[457],[275,2313,2228],{"className":2314},[447],[275,2316,2318,2321],{"className":2317},[447],[275,2319,396],{"className":2320},[447],[275,2322,2324],{"className":2323},[672],[275,2325,2327],{"className":2326},[486],[275,2328,2330],{"className":2329},[491],[275,2331,2333],{"className":2332,"style":2248},[495],[275,2334,2335,2338],{"style":2251},[275,2336],{"className":2337,"style":1224},[503],[275,2339,2341],{"className":2340},[508,509,510,511],[275,2342,396],{"className":2343},[447,511],[275,2345,2347,2350],{"style":2346},"top:-2.8734em;",[275,2348],{"className":2349,"style":504},[503],[275,2351,2354],{"className":2352,"style":2353},[778],"min-width:0.853em;height:1.08em;",[781,2355,2357],{"xmlns":783,"width":784,"height":2356,"viewBox":786,"preserveAspectRatio":787},"1.08em",[789,2358],{"d":791},[275,2360,573],{"className":2361},[572],[275,2363,2365],{"className":2364},[491],[275,2366,2369],{"className":2367,"style":2368},[495],"height:0.1266em;",[275,2370],{},[275,2372],{"className":2373,"style":458},[457],[275,2375,313],{"className":2376},[462],[275,2378],{"className":2379,"style":458},[457],[275,2381,2383,2387,2437,2440,2443],{"className":2382},[430],[275,2384],{"className":2385,"style":2386},[434],"height:1.04em;vertical-align:-0.1328em;",[275,2388,2390],{"className":2389},[447,636],[275,2391,2393,2428],{"className":2392},[486,487],[275,2394,2396,2425],{"className":2395},[491],[275,2397,2400,2412],{"className":2398,"style":2399},[495],"height:0.9072em;",[275,2401,2403,2406],{"className":2402,"style":2217},[650],[275,2404],{"className":2405,"style":504},[503],[275,2407,2409],{"className":2408,"style":2224},[447],[275,2410,2157],{"className":2411},[447],[275,2413,2415,2418],{"style":2414},"top:-2.8672em;",[275,2416],{"className":2417,"style":504},[503],[275,2419,2421],{"className":2420,"style":2353},[778],[781,2422,2423],{"xmlns":783,"width":784,"height":2356,"viewBox":786,"preserveAspectRatio":787},[789,2424],{"d":791},[275,2426,573],{"className":2427},[572],[275,2429,2431],{"className":2430},[491],[275,2432,2435],{"className":2433,"style":2434},[495],"height:0.1328em;",[275,2436],{},[275,2438],{"className":2439,"style":458},[457],[275,2441,2160],{"className":2442},[462],[275,2444],{"className":2445,"style":458},[457],[275,2447,2449,2452],{"className":2448},[430],[275,2450],{"className":2451,"style":2026},[434],[275,2453,2163],{"className":2454},[447],[16,2456,2457],{},[275,2458,2460,2518],{"className":2459},[278],[275,2461,2463],{"className":2462},[282],[284,2464,2465],{"xmlns":286},[288,2466,2467,2515],{},[291,2468,2469,2471,2473,2475,2477,2503,2505,2510,2512],{},[294,2470,333],{"mathvariant":332},[294,2472,327],{},[294,2474,333],{"mathvariant":332},[298,2476,313],{},[376,2478,2479],{},[291,2480,2481,2487,2489,2495,2497],{},[2129,2482,2483,2485],{},[394,2484,1685],{},[394,2486,396],{},[298,2488,1852],{},[2129,2490,2491,2493],{},[394,2492,1692],{},[394,2494,396],{},[298,2496,1852],{},[2129,2498,2499,2501],{},[394,2500,1699],{},[394,2502,396],{},[298,2504,313],{},[376,2506,2507],{},[394,2508,2509],{},"0.86",[298,2511,2160],{},[394,2513,2514],{},"0.927",[418,2516,2517],{"encoding":420},"\\|b\\| = \\sqrt{0.7^2 + 0.6^2 + 0.1^2} = \\sqrt{0.86} \\approx 0.927",[275,2519,2521,2545,2720,2782],{"className":2520,"ariaHidden":426},[425],[275,2522,2524,2527,2530,2533,2536,2539,2542],{"className":2523},[430],[275,2525],{"className":2526,"style":435},[434],[275,2528,333],{"className":2529},[447],[275,2531,327],{"className":2532},[447,448],[275,2534,333],{"className":2535},[447],[275,2537],{"className":2538,"style":458},[457],[275,2540,313],{"className":2541},[462],[275,2543],{"className":2544,"style":458},[457],[275,2546,2548,2551,2711,2714,2717],{"className":2547},[430],[275,2549],{"className":2550,"style":2200},[434],[275,2552,2554],{"className":2553},[447,636],[275,2555,2557,2703],{"className":2556},[486,487],[275,2558,2560,2700],{"className":2559},[491],[275,2561,2563,2688],{"className":2562,"style":2213},[495],[275,2564,2566,2569],{"className":2565,"style":2217},[650],[275,2567],{"className":2568,"style":504},[503],[275,2570,2572,2575,2605,2608,2611,2614,2617,2647,2650,2653,2656,2659],{"className":2571,"style":2224},[447],[275,2573,2228],{"className":2574},[447],[275,2576,2578,2582],{"className":2577},[447],[275,2579,2581],{"className":2580},[447],"7",[275,2583,2585],{"className":2584},[672],[275,2586,2588],{"className":2587},[486],[275,2589,2591],{"className":2590},[491],[275,2592,2594],{"className":2593,"style":2248},[495],[275,2595,2596,2599],{"style":2251},[275,2597],{"className":2598,"style":1224},[503],[275,2600,2602],{"className":2601},[508,509,510,511],[275,2603,396],{"className":2604},[447,511],[275,2606],{"className":2607,"style":1166},[457],[275,2609,1852],{"className":2610},[527],[275,2612],{"className":2613,"style":1166},[457],[275,2615,2228],{"className":2616},[447],[275,2618,2620,2624],{"className":2619},[447],[275,2621,2623],{"className":2622},[447],"6",[275,2625,2627],{"className":2626},[672],[275,2628,2630],{"className":2629},[486],[275,2631,2633],{"className":2632},[491],[275,2634,2636],{"className":2635,"style":2248},[495],[275,2637,2638,2641],{"style":2251},[275,2639],{"className":2640,"style":1224},[503],[275,2642,2644],{"className":2643},[508,509,510,511],[275,2645,396],{"className":2646},[447,511],[275,2648],{"className":2649,"style":1166},[457],[275,2651,1852],{"className":2652},[527],[275,2654],{"className":2655,"style":1166},[457],[275,2657,2228],{"className":2658},[447],[275,2660,2662,2665],{"className":2661},[447],[275,2663,1586],{"className":2664},[447],[275,2666,2668],{"className":2667},[672],[275,2669,2671],{"className":2670},[486],[275,2672,2674],{"className":2673},[491],[275,2675,2677],{"className":2676,"style":2248},[495],[275,2678,2679,2682],{"style":2251},[275,2680],{"className":2681,"style":1224},[503],[275,2683,2685],{"className":2684},[508,509,510,511],[275,2686,396],{"className":2687},[447,511],[275,2689,2690,2693],{"style":2346},[275,2691],{"className":2692,"style":504},[503],[275,2694,2696],{"className":2695,"style":2353},[778],[781,2697,2698],{"xmlns":783,"width":784,"height":2356,"viewBox":786,"preserveAspectRatio":787},[789,2699],{"d":791},[275,2701,573],{"className":2702},[572],[275,2704,2706],{"className":2705},[491],[275,2707,2709],{"className":2708,"style":2368},[495],[275,2710],{},[275,2712],{"className":2713,"style":458},[457],[275,2715,313],{"className":2716},[462],[275,2718],{"className":2719,"style":458},[457],[275,2721,2723,2726,2773,2776,2779],{"className":2722},[430],[275,2724],{"className":2725,"style":2386},[434],[275,2727,2729],{"className":2728},[447,636],[275,2730,2732,2765],{"className":2731},[486,487],[275,2733,2735,2762],{"className":2734},[491],[275,2736,2738,2750],{"className":2737,"style":2399},[495],[275,2739,2741,2744],{"className":2740,"style":2217},[650],[275,2742],{"className":2743,"style":504},[503],[275,2745,2747],{"className":2746,"style":2224},[447],[275,2748,2509],{"className":2749},[447],[275,2751,2752,2755],{"style":2414},[275,2753],{"className":2754,"style":504},[503],[275,2756,2758],{"className":2757,"style":2353},[778],[781,2759,2760],{"xmlns":783,"width":784,"height":2356,"viewBox":786,"preserveAspectRatio":787},[789,2761],{"d":791},[275,2763,573],{"className":2764},[572],[275,2766,2768],{"className":2767},[491],[275,2769,2771],{"className":2770,"style":2434},[495],[275,2772],{},[275,2774],{"className":2775,"style":458},[457],[275,2777,2160],{"className":2778},[462],[275,2780],{"className":2781,"style":458},[457],[275,2783,2785,2788],{"className":2784},[430],[275,2786],{"className":2787,"style":2026},[434],[275,2789,2514],{"className":2790},[447],[16,2792,2793],{},[275,2794,2796,2846],{"className":2795},[278],[275,2797,2799],{"className":2798},[282],[284,2800,2801],{"xmlns":286},[288,2802,2803,2843],{},[291,2804,2805,2807,2809,2811,2813,2815,2817,2829,2831,2838,2840],{},[294,2806,296],{},[298,2808,300],{},[298,2810,304],{"stretchy":303},[294,2812,307],{},[298,2814,310],{"stretchy":303},[298,2816,313],{},[315,2818,2819,2821],{},[394,2820,1886],{},[291,2822,2823,2825,2827],{},[394,2824,2163],{},[298,2826,1847],{},[394,2828,2514],{},[298,2830,2160],{},[315,2832,2833,2835],{},[394,2834,1886],{},[394,2836,2837],{},"0.894",[298,2839,2160],{},[394,2841,2842],{},"0.98",[418,2844,2845],{"encoding":420},"\\cos(\\theta) = \\frac{0.88}{0.964 \\times 0.927} \\approx \\frac{0.88}{0.894} \\approx 0.98",[275,2847,2849,2876,2968,3053],{"className":2848,"ariaHidden":426},[425],[275,2850,2852,2855,2858,2861,2864,2867,2870,2873],{"className":2851},[430],[275,2853],{"className":2854,"style":435},[434],[275,2856,296],{"className":2857},[439],[275,2859,304],{"className":2860},[443],[275,2862,307],{"className":2863,"style":449},[447,448],[275,2865,310],{"className":2866},[453],[275,2868],{"className":2869,"style":458},[457],[275,2871,313],{"className":2872},[462],[275,2874],{"className":2875,"style":458},[457],[275,2877,2879,2883,2959,2962,2965],{"className":2878},[430],[275,2880],{"className":2881,"style":2882},[434],"height:1.2484em;vertical-align:-0.4033em;",[275,2884,2886,2889,2956],{"className":2885},[447],[275,2887],{"className":2888},[443,479],[275,2890,2892],{"className":2891},[315],[275,2893,2895,2947],{"className":2894},[486,487],[275,2896,2898,2944],{"className":2897},[491],[275,2899,2902,2922,2930],{"className":2900,"style":2901},[495],"height:0.8451em;",[275,2903,2904,2907],{"style":499},[275,2905],{"className":2906,"style":504},[503],[275,2908,2910],{"className":2909},[508,509,510,511],[275,2911,2913,2916,2919],{"className":2912},[447,511],[275,2914,2163],{"className":2915},[447,511],[275,2917,1847],{"className":2918},[527,511],[275,2920,2514],{"className":2921},[447,511],[275,2923,2924,2927],{"style":539},[275,2925],{"className":2926,"style":504},[503],[275,2928],{"className":2929,"style":547},[546],[275,2931,2932,2935],{"style":550},[275,2933],{"className":2934,"style":504},[503],[275,2936,2938],{"className":2937},[508,509,510,511],[275,2939,2941],{"className":2940},[447,511],[275,2942,1886],{"className":2943},[447,511],[275,2945,573],{"className":2946},[572],[275,2948,2950],{"className":2949},[491],[275,2951,2954],{"className":2952,"style":2953},[495],"height:0.4033em;",[275,2955],{},[275,2957],{"className":2958},[453,479],[275,2960],{"className":2961,"style":458},[457],[275,2963,2160],{"className":2964},[462],[275,2966],{"className":2967,"style":458},[457],[275,2969,2971,2975,3044,3047,3050],{"className":2970},[430],[275,2972],{"className":2973,"style":2974},[434],"height:1.1901em;vertical-align:-0.345em;",[275,2976,2978,2981,3041],{"className":2977},[447],[275,2979],{"className":2980},[443,479],[275,2982,2984],{"className":2983},[315],[275,2985,2987,3032],{"className":2986},[486,487],[275,2988,2990,3029],{"className":2989},[491],[275,2991,2993,3007,3015],{"className":2992,"style":2901},[495],[275,2994,2995,2998],{"style":499},[275,2996],{"className":2997,"style":504},[503],[275,2999,3001],{"className":3000},[508,509,510,511],[275,3002,3004],{"className":3003},[447,511],[275,3005,2837],{"className":3006},[447,511],[275,3008,3009,3012],{"style":539},[275,3010],{"className":3011,"style":504},[503],[275,3013],{"className":3014,"style":547},[546],[275,3016,3017,3020],{"style":550},[275,3018],{"className":3019,"style":504},[503],[275,3021,3023],{"className":3022},[508,509,510,511],[275,3024,3026],{"className":3025},[447,511],[275,3027,1886],{"className":3028},[447,511],[275,3030,573],{"className":3031},[572],[275,3033,3035],{"className":3034},[491],[275,3036,3039],{"className":3037,"style":3038},[495],"height:0.345em;",[275,3040],{},[275,3042],{"className":3043},[453,479],[275,3045],{"className":3046,"style":458},[457],[275,3048,2160],{"className":3049},[462],[275,3051],{"className":3052,"style":458},[457],[275,3054,3056,3059],{"className":3055},[430],[275,3057],{"className":3058,"style":2026},[434],[275,3060,2842],{"className":3061},[447],[16,3063,3064],{},"再来一个不同人的人脸向量：",[16,3066,3067],{},[275,3068,3070,3133],{"className":3069},[278],[275,3071,3073],{"className":3072},[282],[284,3074,3075],{"xmlns":286},[288,3076,3077,3130],{},[291,3078,3079,3081,3083,3085,3087,3089,3091,3093,3095,3097,3099,3101,3103,3106,3108,3110,3112,3114,3116,3118,3121,3123,3125,3128],{},[294,3080,321],{},[298,3082,313],{},[298,3084,304],{"stretchy":303},[394,3086,1655],{},[298,3088,1589],{"separator":426},[1659,3090,1661],{},[394,3092,1664],{},[298,3094,1589],{"separator":426},[1659,3096,1661],{},[394,3098,1671],{},[298,3100,310],{"stretchy":303},[457,3102],{"width":1676},[294,3104,3105],{},"c",[298,3107,313],{},[298,3109,304],{"stretchy":303},[394,3111,1699],{},[298,3113,1589],{"separator":426},[1659,3115,1661],{},[298,3117,1583],{},[394,3119,3120],{},"0.3",[298,3122,1589],{"separator":426},[1659,3124,1661],{},[394,3126,3127],{},"0.9",[298,3129,310],{"stretchy":303},[418,3131,3132],{"encoding":420},"a = (0.8,\\ 0.5,\\ 0.2) \\qquad c = (0.1,\\ -0.3,\\ 0.9)",[275,3134,3136,3154,3208],{"className":3135,"ariaHidden":426},[425],[275,3137,3139,3142,3145,3148,3151],{"className":3138},[430],[275,3140],{"className":3141,"style":1714},[434],[275,3143,321],{"className":3144},[447,448],[275,3146],{"className":3147,"style":458},[457],[275,3149,313],{"className":3150},[462],[275,3152],{"className":3153,"style":458},[457],[275,3155,3157,3160,3163,3166,3169,3172,3175,3178,3181,3184,3187,3190,3193,3196,3199,3202,3205],{"className":3156},[430],[275,3158],{"className":3159,"style":435},[434],[275,3161,304],{"className":3162},[443],[275,3164,1655],{"className":3165},[447],[275,3167,1589],{"className":3168},[1619],[275,3170,1661],{"className":3171},[457],[275,3173],{"className":3174,"style":1246},[457],[275,3176,1664],{"className":3177},[447],[275,3179,1589],{"className":3180},[1619],[275,3182,1661],{"className":3183},[457],[275,3185],{"className":3186,"style":1246},[457],[275,3188,1671],{"className":3189},[447],[275,3191,310],{"className":3192},[453],[275,3194],{"className":3195,"style":1769},[457],[275,3197,3105],{"className":3198},[447,448],[275,3200],{"className":3201,"style":458},[457],[275,3203,313],{"className":3204},[462],[275,3206],{"className":3207,"style":458},[457],[275,3209,3211,3214,3217,3220,3223,3226,3229,3232,3235,3238,3241,3244,3247],{"className":3210},[430],[275,3212],{"className":3213,"style":435},[434],[275,3215,304],{"className":3216},[443],[275,3218,1699],{"className":3219},[447],[275,3221,1589],{"className":3222},[1619],[275,3224,1661],{"className":3225},[457],[275,3227],{"className":3228,"style":1246},[457],[275,3230,1583],{"className":3231},[447],[275,3233,3120],{"className":3234},[447],[275,3236,1589],{"className":3237},[1619],[275,3239,1661],{"className":3240},[457],[275,3242],{"className":3243,"style":1246},[457],[275,3245,3127],{"className":3246},[447],[275,3248,310],{"className":3249},[453],[16,3251,3252],{},[275,3253,3255,3323],{"className":3254},[278],[275,3256,3258],{"className":3257},[282],[284,3259,3260],{"xmlns":286},[288,3261,3262,3320],{},[291,3263,3264,3266,3268,3270,3272,3274,3276,3278,3280,3282,3284,3286,3288,3290,3292,3294,3296,3298,3300,3302,3305,3307,3310,3312,3315,3317],{},[294,3265,321],{},[298,3267,324],{},[294,3269,3105],{},[298,3271,313],{},[394,3273,1655],{},[298,3275,1847],{},[394,3277,1699],{},[298,3279,1852],{},[394,3281,1664],{},[298,3283,1847],{},[298,3285,304],{"stretchy":303},[298,3287,1583],{},[394,3289,3120],{},[298,3291,310],{"stretchy":303},[298,3293,1852],{},[394,3295,1671],{},[298,3297,1847],{},[394,3299,3127],{},[298,3301,313],{},[394,3303,3304],{},"0.08",[298,3306,1583],{},[394,3308,3309],{},"0.15",[298,3311,1852],{},[394,3313,3314],{},"0.18",[298,3316,313],{},[394,3318,3319],{},"0.11",[418,3321,3322],{"encoding":420},"a \\cdot c = 0.8 \\times 0.1 + 0.5 \\times (-0.3) + 0.2 \\times 0.9 = 0.08 - 0.15 + 0.18 = 0.11",[275,3324,3326,3344,3362,3380,3398,3416,3443,3461,3479,3497,3515,3533],{"className":3325,"ariaHidden":426},[425],[275,3327,3329,3332,3335,3338,3341],{"className":3328},[430],[275,3330],{"className":3331,"style":1159},[434],[275,3333,321],{"className":3334},[447,448],[275,3336],{"className":3337,"style":1166},[457],[275,3339,324],{"className":3340},[527],[275,3342],{"className":3343,"style":1166},[457],[275,3345,3347,3350,3353,3356,3359],{"className":3346},[430],[275,3348],{"className":3349,"style":1714},[434],[275,3351,3105],{"className":3352},[447,448],[275,3354],{"className":3355,"style":458},[457],[275,3357,313],{"className":3358},[462],[275,3360],{"className":3361,"style":458},[457],[275,3363,3365,3368,3371,3374,3377],{"className":3364},[430],[275,3366],{"className":3367,"style":1935},[434],[275,3369,1655],{"className":3370},[447],[275,3372],{"className":3373,"style":1166},[457],[275,3375,1847],{"className":3376},[527],[275,3378],{"className":3379,"style":1166},[457],[275,3381,3383,3386,3389,3392,3395],{"className":3382},[430],[275,3384],{"className":3385,"style":1935},[434],[275,3387,1699],{"className":3388},[447],[275,3390],{"className":3391,"style":1166},[457],[275,3393,1852],{"className":3394},[527],[275,3396],{"className":3397,"style":1166},[457],[275,3399,3401,3404,3407,3410,3413],{"className":3400},[430],[275,3402],{"className":3403,"style":1935},[434],[275,3405,1664],{"className":3406},[447],[275,3408],{"className":3409,"style":1166},[457],[275,3411,1847],{"className":3412},[527],[275,3414],{"className":3415,"style":1166},[457],[275,3417,3419,3422,3425,3428,3431,3434,3437,3440],{"className":3418},[430],[275,3420],{"className":3421,"style":435},[434],[275,3423,304],{"className":3424},[443],[275,3426,1583],{"className":3427},[447],[275,3429,3120],{"className":3430},[447],[275,3432,310],{"className":3433},[453],[275,3435],{"className":3436,"style":1166},[457],[275,3438,1852],{"className":3439},[527],[275,3441],{"className":3442,"style":1166},[457],[275,3444,3446,3449,3452,3455,3458],{"className":3445},[430],[275,3447],{"className":3448,"style":1935},[434],[275,3450,1671],{"className":3451},[447],[275,3453],{"className":3454,"style":1166},[457],[275,3456,1847],{"className":3457},[527],[275,3459],{"className":3460,"style":1166},[457],[275,3462,3464,3467,3470,3473,3476],{"className":3463},[430],[275,3465],{"className":3466,"style":2026},[434],[275,3468,3127],{"className":3469},[447],[275,3471],{"className":3472,"style":458},[457],[275,3474,313],{"className":3475},[462],[275,3477],{"className":3478,"style":458},[457],[275,3480,3482,3485,3488,3491,3494],{"className":3481},[430],[275,3483],{"className":3484,"style":1935},[434],[275,3486,3304],{"className":3487},[447],[275,3489],{"className":3490,"style":1166},[457],[275,3492,1583],{"className":3493},[527],[275,3495],{"className":3496,"style":1166},[457],[275,3498,3500,3503,3506,3509,3512],{"className":3499},[430],[275,3501],{"className":3502,"style":1935},[434],[275,3504,3309],{"className":3505},[447],[275,3507],{"className":3508,"style":1166},[457],[275,3510,1852],{"className":3511},[527],[275,3513],{"className":3514,"style":1166},[457],[275,3516,3518,3521,3524,3527,3530],{"className":3517},[430],[275,3519],{"className":3520,"style":2026},[434],[275,3522,3314],{"className":3523},[447],[275,3525],{"className":3526,"style":458},[457],[275,3528,313],{"className":3529},[462],[275,3531],{"className":3532,"style":458},[457],[275,3534,3536,3539],{"className":3535},[430],[275,3537],{"className":3538,"style":2026},[434],[275,3540,3319],{"className":3541},[447],[16,3543,3544],{},[275,3545,3547,3605],{"className":3546},[278],[275,3548,3550],{"className":3549},[282],[284,3551,3552],{"xmlns":286},[288,3553,3554,3602],{},[291,3555,3556,3558,3560,3562,3564,3590,3592,3597,3599],{},[294,3557,333],{"mathvariant":332},[294,3559,3105],{},[294,3561,333],{"mathvariant":332},[298,3563,313],{},[376,3565,3566],{},[291,3567,3568,3574,3576,3582,3584],{},[2129,3569,3570,3572],{},[394,3571,1699],{},[394,3573,396],{},[298,3575,1852],{},[2129,3577,3578,3580],{},[394,3579,3120],{},[394,3581,396],{},[298,3583,1852],{},[2129,3585,3586,3588],{},[394,3587,3127],{},[394,3589,396],{},[298,3591,313],{},[376,3593,3594],{},[394,3595,3596],{},"0.91",[298,3598,2160],{},[394,3600,3601],{},"0.954",[418,3603,3604],{"encoding":420},"\\|c\\| = \\sqrt{0.1^2 + 0.3^2 + 0.9^2} = \\sqrt{0.91} \\approx 0.954",[275,3606,3608,3632,3807,3869],{"className":3607,"ariaHidden":426},[425],[275,3609,3611,3614,3617,3620,3623,3626,3629],{"className":3610},[430],[275,3612],{"className":3613,"style":435},[434],[275,3615,333],{"className":3616},[447],[275,3618,3105],{"className":3619},[447,448],[275,3621,333],{"className":3622},[447],[275,3624],{"className":3625,"style":458},[457],[275,3627,313],{"className":3628},[462],[275,3630],{"className":3631,"style":458},[457],[275,3633,3635,3638,3798,3801,3804],{"className":3634},[430],[275,3636],{"className":3637,"style":2200},[434],[275,3639,3641],{"className":3640},[447,636],[275,3642,3644,3790],{"className":3643},[486,487],[275,3645,3647,3787],{"className":3646},[491],[275,3648,3650,3775],{"className":3649,"style":2213},[495],[275,3651,3653,3656],{"className":3652,"style":2217},[650],[275,3654],{"className":3655,"style":504},[503],[275,3657,3659,3662,3691,3694,3697,3700,3703,3733,3736,3739,3742,3745],{"className":3658,"style":2224},[447],[275,3660,2228],{"className":3661},[447],[275,3663,3665,3668],{"className":3664},[447],[275,3666,1586],{"className":3667},[447],[275,3669,3671],{"className":3670},[672],[275,3672,3674],{"className":3673},[486],[275,3675,3677],{"className":3676},[491],[275,3678,3680],{"className":3679,"style":2248},[495],[275,3681,3682,3685],{"style":2251},[275,3683],{"className":3684,"style":1224},[503],[275,3686,3688],{"className":3687},[508,509,510,511],[275,3689,396],{"className":3690},[447,511],[275,3692],{"className":3693,"style":1166},[457],[275,3695,1852],{"className":3696},[527],[275,3698],{"className":3699,"style":1166},[457],[275,3701,2228],{"className":3702},[447],[275,3704,3706,3710],{"className":3705},[447],[275,3707,3709],{"className":3708},[447],"3",[275,3711,3713],{"className":3712},[672],[275,3714,3716],{"className":3715},[486],[275,3717,3719],{"className":3718},[491],[275,3720,3722],{"className":3721,"style":2248},[495],[275,3723,3724,3727],{"style":2251},[275,3725],{"className":3726,"style":1224},[503],[275,3728,3730],{"className":3729},[508,509,510,511],[275,3731,396],{"className":3732},[447,511],[275,3734],{"className":3735,"style":1166},[457],[275,3737,1852],{"className":3738},[527],[275,3740],{"className":3741,"style":1166},[457],[275,3743,2228],{"className":3744},[447],[275,3746,3748,3752],{"className":3747},[447],[275,3749,3751],{"className":3750},[447],"9",[275,3753,3755],{"className":3754},[672],[275,3756,3758],{"className":3757},[486],[275,3759,3761],{"className":3760},[491],[275,3762,3764],{"className":3763,"style":2248},[495],[275,3765,3766,3769],{"style":2251},[275,3767],{"className":3768,"style":1224},[503],[275,3770,3772],{"className":3771},[508,509,510,511],[275,3773,396],{"className":3774},[447,511],[275,3776,3777,3780],{"style":2346},[275,3778],{"className":3779,"style":504},[503],[275,3781,3783],{"className":3782,"style":2353},[778],[781,3784,3785],{"xmlns":783,"width":784,"height":2356,"viewBox":786,"preserveAspectRatio":787},[789,3786],{"d":791},[275,3788,573],{"className":3789},[572],[275,3791,3793],{"className":3792},[491],[275,3794,3796],{"className":3795,"style":2368},[495],[275,3797],{},[275,3799],{"className":3800,"style":458},[457],[275,3802,313],{"className":3803},[462],[275,3805],{"className":3806,"style":458},[457],[275,3808,3810,3813,3860,3863,3866],{"className":3809},[430],[275,3811],{"className":3812,"style":2386},[434],[275,3814,3816],{"className":3815},[447,636],[275,3817,3819,3852],{"className":3818},[486,487],[275,3820,3822,3849],{"className":3821},[491],[275,3823,3825,3837],{"className":3824,"style":2399},[495],[275,3826,3828,3831],{"className":3827,"style":2217},[650],[275,3829],{"className":3830,"style":504},[503],[275,3832,3834],{"className":3833,"style":2224},[447],[275,3835,3596],{"className":3836},[447],[275,3838,3839,3842],{"style":2414},[275,3840],{"className":3841,"style":504},[503],[275,3843,3845],{"className":3844,"style":2353},[778],[781,3846,3847],{"xmlns":783,"width":784,"height":2356,"viewBox":786,"preserveAspectRatio":787},[789,3848],{"d":791},[275,3850,573],{"className":3851},[572],[275,3853,3855],{"className":3854},[491],[275,3856,3858],{"className":3857,"style":2434},[495],[275,3859],{},[275,3861],{"className":3862,"style":458},[457],[275,3864,2160],{"className":3865},[462],[275,3867],{"className":3868,"style":458},[457],[275,3870,3872,3875],{"className":3871},[430],[275,3873],{"className":3874,"style":2026},[434],[275,3876,3601],{"className":3877},[447],[16,3879,3880],{},[275,3881,3883,3933],{"className":3882},[278],[275,3884,3886],{"className":3885},[282],[284,3887,3888],{"xmlns":286},[288,3889,3890,3930],{},[291,3891,3892,3894,3896,3898,3900,3902,3904,3916,3918,3925,3927],{},[294,3893,296],{},[298,3895,300],{},[298,3897,304],{"stretchy":303},[294,3899,307],{},[298,3901,310],{"stretchy":303},[298,3903,313],{},[315,3905,3906,3908],{},[394,3907,3319],{},[291,3909,3910,3912,3914],{},[394,3911,2163],{},[298,3913,1847],{},[394,3915,3601],{},[298,3917,2160],{},[315,3919,3920,3922],{},[394,3921,3319],{},[394,3923,3924],{},"0.920",[298,3926,2160],{},[394,3928,3929],{},"0.12",[418,3931,3932],{"encoding":420},"\\cos(\\theta) = \\frac{0.11}{0.964 \\times 0.954} \\approx \\frac{0.11}{0.920} \\approx 0.12",[275,3934,3936,3963,4052,4135],{"className":3935,"ariaHidden":426},[425],[275,3937,3939,3942,3945,3948,3951,3954,3957,3960],{"className":3938},[430],[275,3940],{"className":3941,"style":435},[434],[275,3943,296],{"className":3944},[439],[275,3946,304],{"className":3947},[443],[275,3949,307],{"className":3950,"style":449},[447,448],[275,3952,310],{"className":3953},[453],[275,3955],{"className":3956,"style":458},[457],[275,3958,313],{"className":3959},[462],[275,3961],{"className":3962,"style":458},[457],[275,3964,3966,3969,4043,4046,4049],{"className":3965},[430],[275,3967],{"className":3968,"style":2882},[434],[275,3970,3972,3975,4040],{"className":3971},[447],[275,3973],{"className":3974},[443,479],[275,3976,3978],{"className":3977},[315],[275,3979,3981,4032],{"className":3980},[486,487],[275,3982,3984,4029],{"className":3983},[491],[275,3985,3987,4007,4015],{"className":3986,"style":2901},[495],[275,3988,3989,3992],{"style":499},[275,3990],{"className":3991,"style":504},[503],[275,3993,3995],{"className":3994},[508,509,510,511],[275,3996,3998,4001,4004],{"className":3997},[447,511],[275,3999,2163],{"className":4000},[447,511],[275,4002,1847],{"className":4003},[527,511],[275,4005,3601],{"className":4006},[447,511],[275,4008,4009,4012],{"style":539},[275,4010],{"className":4011,"style":504},[503],[275,4013],{"className":4014,"style":547},[546],[275,4016,4017,4020],{"style":550},[275,4018],{"className":4019,"style":504},[503],[275,4021,4023],{"className":4022},[508,509,510,511],[275,4024,4026],{"className":4025},[447,511],[275,4027,3319],{"className":4028},[447,511],[275,4030,573],{"className":4031},[572],[275,4033,4035],{"className":4034},[491],[275,4036,4038],{"className":4037,"style":2953},[495],[275,4039],{},[275,4041],{"className":4042},[453,479],[275,4044],{"className":4045,"style":458},[457],[275,4047,2160],{"className":4048},[462],[275,4050],{"className":4051,"style":458},[457],[275,4053,4055,4058,4126,4129,4132],{"className":4054},[430],[275,4056],{"className":4057,"style":2974},[434],[275,4059,4061,4064,4123],{"className":4060},[447],[275,4062],{"className":4063},[443,479],[275,4065,4067],{"className":4066},[315],[275,4068,4070,4115],{"className":4069},[486,487],[275,4071,4073,4112],{"className":4072},[491],[275,4074,4076,4090,4098],{"className":4075,"style":2901},[495],[275,4077,4078,4081],{"style":499},[275,4079],{"className":4080,"style":504},[503],[275,4082,4084],{"className":4083},[508,509,510,511],[275,4085,4087],{"className":4086},[447,511],[275,4088,3924],{"className":4089},[447,511],[275,4091,4092,4095],{"style":539},[275,4093],{"className":4094,"style":504},[503],[275,4096],{"className":4097,"style":547},[546],[275,4099,4100,4103],{"style":550},[275,4101],{"className":4102,"style":504},[503],[275,4104,4106],{"className":4105},[508,509,510,511],[275,4107,4109],{"className":4108},[447,511],[275,4110,3319],{"className":4111},[447,511],[275,4113,573],{"className":4114},[572],[275,4116,4118],{"className":4117},[491],[275,4119,4121],{"className":4120,"style":3038},[495],[275,4122],{},[275,4124],{"className":4125},[453,479],[275,4127],{"className":4128,"style":458},[457],[275,4130,2160],{"className":4131},[462],[275,4133],{"className":4134,"style":458},[457],[275,4136,4138,4141],{"className":4137},[430],[275,4139],{"className":4140,"style":2026},[434],[275,4142,3929],{"className":4143},[447],[16,4145,4146,4147,4175,4176,4229,4230,4282,4283],{},"设判定阈值 ",[275,4148,4150,4163],{"className":4149},[278],[275,4151,4153],{"className":4152},[282],[284,4154,4155],{"xmlns":286},[288,4156,4157,4161],{},[291,4158,4159],{},[394,4160,1664],{},[418,4162,1664],{"encoding":420},[275,4164,4166],{"className":4165,"ariaHidden":426},[425],[275,4167,4169,4172],{"className":4168},[430],[275,4170],{"className":4171,"style":2026},[434],[275,4173,1664],{"className":4174},[447],"：",[275,4177,4179,4198],{"className":4178},[278],[275,4180,4182],{"className":4181},[282],[284,4183,4184],{"xmlns":286},[288,4185,4186,4195],{},[291,4187,4188,4190,4193],{},[394,4189,2842],{},[298,4191,4192],{},">",[394,4194,1664],{},[418,4196,4197],{"encoding":420},"0.98 > 0.5",[275,4199,4201,4220],{"className":4200,"ariaHidden":426},[425],[275,4202,4204,4208,4211,4214,4217],{"className":4203},[430],[275,4205],{"className":4206,"style":4207},[434],"height:0.6835em;vertical-align:-0.0391em;",[275,4209,2842],{"className":4210},[447],[275,4212],{"className":4213,"style":458},[457],[275,4215,4192],{"className":4216},[462],[275,4218],{"className":4219,"style":458},[457],[275,4221,4223,4226],{"className":4222},[430],[275,4224],{"className":4225,"style":2026},[434],[275,4227,1664],{"className":4228},[447]," → 同一个人；",[275,4231,4233,4252],{"className":4232},[278],[275,4234,4236],{"className":4235},[282],[284,4237,4238],{"xmlns":286},[288,4239,4240,4249],{},[291,4241,4242,4244,4247],{},[394,4243,3929],{},[298,4245,4246],{},"\u003C",[394,4248,1664],{},[418,4250,4251],{"encoding":420},"0.12 \u003C 0.5",[275,4253,4255,4273],{"className":4254,"ariaHidden":426},[425],[275,4256,4258,4261,4264,4267,4270],{"className":4257},[430],[275,4259],{"className":4260,"style":4207},[434],[275,4262,3929],{"className":4263},[447],[275,4265],{"className":4266,"style":458},[457],[275,4268,4246],{"className":4269},[462],[275,4271],{"className":4272,"style":458},[457],[275,4274,4276,4279],{"className":4275},[430],[275,4277],{"className":4278,"style":2026},[434],[275,4280,1664],{"className":4281},[447]," → 不同人。",[20,4284,4285],{},"「对比人物图片」在数学上就是这么一句话：算内积，比阈值。",[16,4287,4288,4289,4292,4293,4391],{},"工程上还有个常用技巧 ——",[20,4290,4291],{},"L2 归一化","：先把每个向量除以自己的长度，让 ",[275,4294,4296,4324],{"className":4295},[278],[275,4297,4299],{"className":4298},[282],[284,4300,4301],{"xmlns":286},[288,4302,4303,4321],{},[291,4304,4305,4307,4315,4317,4319],{},[294,4306,333],{"mathvariant":332},[4308,4309,4310,4312],"mover",{"accent":426},[294,4311,321],{},[298,4313,4314],{},"^",[294,4316,333],{"mathvariant":332},[298,4318,313],{},[394,4320,1586],{},[418,4322,4323],{"encoding":420},"\\|\\hat{a}\\| = 1",[275,4325,4327,4382],{"className":4326,"ariaHidden":426},[425],[275,4328,4330,4333,4336,4370,4373,4376,4379],{"className":4329},[430],[275,4331],{"className":4332,"style":435},[434],[275,4334,333],{"className":4335},[447],[275,4337,4340],{"className":4338},[447,4339],"accent",[275,4341,4343],{"className":4342},[486],[275,4344,4346],{"className":4345},[491],[275,4347,4349,4357],{"className":4348,"style":1179},[495],[275,4350,4351,4354],{"style":2217},[275,4352],{"className":4353,"style":504},[503],[275,4355,321],{"className":4356},[447,448],[275,4358,4359,4362],{"style":2217},[275,4360],{"className":4361,"style":504},[503],[275,4363,4367],{"className":4364,"style":4366},[4365],"accent-body","left:-0.25em;",[275,4368,4314],{"className":4369},[447],[275,4371,333],{"className":4372},[447],[275,4374],{"className":4375,"style":458},[457],[275,4377,313],{"className":4378},[462],[275,4380],{"className":4381,"style":458},[457],[275,4383,4385,4388],{"className":4384},[430],[275,4386],{"className":4387,"style":2026},[434],[275,4389,1586],{"className":4390},[447],"，再算内积：",[16,4393,4394],{},[275,4395,4397,4453],{"className":4396},[278],[275,4398,4400],{"className":4399},[282],[284,4401,4402],{"xmlns":286},[288,4403,4404,4450],{},[291,4405,4406,4412,4414,4426,4428,4430,4436,4438],{},[4308,4407,4408,4410],{"accent":426},[294,4409,321],{},[298,4411,4314],{},[298,4413,313],{},[315,4415,4416,4418],{},[294,4417,321],{},[291,4419,4420,4422,4424],{},[294,4421,333],{"mathvariant":332},[294,4423,321],{},[294,4425,333],{"mathvariant":332},[298,4427,1589],{"separator":426},[457,4429],{"width":1676},[4308,4431,4432,4434],{"accent":426},[294,4433,327],{},[298,4435,4314],{},[298,4437,313],{},[315,4439,4440,4442],{},[294,4441,327],{},[291,4443,4444,4446,4448],{},[294,4445,333],{"mathvariant":332},[294,4447,327],{},[294,4449,333],{"mathvariant":332},[418,4451,4452],{"encoding":420},"\\hat{a} = \\frac{a}{\\|a\\|}, \\qquad \\hat{b} = \\frac{b}{\\|b\\|}",[275,4454,4456,4502,4635],{"className":4455,"ariaHidden":426},[425],[275,4457,4459,4462,4493,4496,4499],{"className":4458},[430],[275,4460],{"className":4461,"style":1179},[434],[275,4463,4465],{"className":4464},[447,4339],[275,4466,4468],{"className":4467},[486],[275,4469,4471],{"className":4470},[491],[275,4472,4474,4482],{"className":4473,"style":1179},[495],[275,4475,4476,4479],{"style":2217},[275,4477],{"className":4478,"style":504},[503],[275,4480,321],{"className":4481},[447,448],[275,4483,4484,4487],{"style":2217},[275,4485],{"className":4486,"style":504},[503],[275,4488,4490],{"className":4489,"style":4366},[4365],[275,4491,4314],{"className":4492},[447],[275,4494],{"className":4495,"style":458},[457],[275,4497,313],{"className":4498},[462],[275,4500],{"className":4501,"style":458},[457],[275,4503,4505,4509,4584,4587,4590,4593,4626,4629,4632],{"className":4504},[430],[275,4506],{"className":4507,"style":4508},[434],"height:1.4779em;vertical-align:-0.52em;",[275,4510,4512,4515,4581],{"className":4511},[447],[275,4513],{"className":4514},[443,479],[275,4516,4518],{"className":4517},[315],[275,4519,4521,4573],{"className":4520},[486,487],[275,4522,4524,4570],{"className":4523},[491],[275,4525,4528,4548,4556],{"className":4526,"style":4527},[495],"height:0.6954em;",[275,4529,4530,4533],{"style":499},[275,4531],{"className":4532,"style":504},[503],[275,4534,4536],{"className":4535},[508,509,510,511],[275,4537,4539,4542,4545],{"className":4538},[447,511],[275,4540,333],{"className":4541},[447,511],[275,4543,321],{"className":4544},[447,448,511],[275,4546,333],{"className":4547},[447,511],[275,4549,4550,4553],{"style":539},[275,4551],{"className":4552,"style":504},[503],[275,4554],{"className":4555,"style":547},[546],[275,4557,4558,4561],{"style":550},[275,4559],{"className":4560,"style":504},[503],[275,4562,4564],{"className":4563},[508,509,510,511],[275,4565,4567],{"className":4566},[447,511],[275,4568,321],{"className":4569},[447,448,511],[275,4571,573],{"className":4572},[572],[275,4574,4576],{"className":4575},[491],[275,4577,4579],{"className":4578,"style":580},[495],[275,4580],{},[275,4582],{"className":4583},[453,479],[275,4585,1589],{"className":4586},[1619],[275,4588],{"className":4589,"style":1769},[457],[275,4591],{"className":4592,"style":1246},[457],[275,4594,4596],{"className":4595},[447,4339],[275,4597,4599],{"className":4598},[486],[275,4600,4602],{"className":4601},[491],[275,4603,4606,4614],{"className":4604,"style":4605},[495],"height:0.9579em;",[275,4607,4608,4611],{"style":2217},[275,4609],{"className":4610,"style":504},[503],[275,4612,327],{"className":4613},[447,448],[275,4615,4617,4620],{"style":4616},"top:-3.2634em;",[275,4618],{"className":4619,"style":504},[503],[275,4621,4623],{"className":4622,"style":4366},[4365],[275,4624,4314],{"className":4625},[447],[275,4627],{"className":4628,"style":458},[457],[275,4630,313],{"className":4631},[462],[275,4633],{"className":4634,"style":458},[457],[275,4636,4638,4641],{"className":4637},[430],[275,4639],{"className":4640,"style":472},[434],[275,4642,4644,4647,4712],{"className":4643},[447],[275,4645],{"className":4646},[443,479],[275,4648,4650],{"className":4649},[315],[275,4651,4653,4704],{"className":4652},[486,487],[275,4654,4656,4701],{"className":4655},[491],[275,4657,4659,4679,4687],{"className":4658,"style":496},[495],[275,4660,4661,4664],{"style":499},[275,4662],{"className":4663,"style":504},[503],[275,4665,4667],{"className":4666},[508,509,510,511],[275,4668,4670,4673,4676],{"className":4669},[447,511],[275,4671,333],{"className":4672},[447,511],[275,4674,327],{"className":4675},[447,448,511],[275,4677,333],{"className":4678},[447,511],[275,4680,4681,4684],{"style":539},[275,4682],{"className":4683,"style":504},[503],[275,4685],{"className":4686,"style":547},[546],[275,4688,4689,4692],{"style":550},[275,4690],{"className":4691,"style":504},[503],[275,4693,4695],{"className":4694},[508,509,510,511],[275,4696,4698],{"className":4697},[447,511],[275,4699,327],{"className":4700},[447,448,511],[275,4702,573],{"className":4703},[572],[275,4705,4707],{"className":4706},[491],[275,4708,4710],{"className":4709,"style":580},[495],[275,4711],{},[275,4713],{"className":4714},[453,479],[16,4716,4717],{},[275,4718,4720,4758],{"className":4719},[278],[275,4721,4723],{"className":4722},[282],[284,4724,4725],{"xmlns":286},[288,4726,4727,4755],{},[291,4728,4729,4731,4733,4735,4737,4739,4741,4747,4749],{},[294,4730,296],{},[298,4732,300],{},[298,4734,304],{"stretchy":303},[294,4736,307],{},[298,4738,310],{"stretchy":303},[298,4740,313],{},[4308,4742,4743,4745],{"accent":426},[294,4744,321],{},[298,4746,4314],{},[298,4748,324],{},[4308,4750,4751,4753],{"accent":426},[294,4752,327],{},[298,4754,4314],{},[418,4756,4757],{"encoding":420},"\\cos(\\theta) = \\hat{a} \\cdot \\hat{b}",[275,4759,4761,4788,4834],{"className":4760,"ariaHidden":426},[425],[275,4762,4764,4767,4770,4773,4776,4779,4782,4785],{"className":4763},[430],[275,4765],{"className":4766,"style":435},[434],[275,4768,296],{"className":4769},[439],[275,4771,304],{"className":4772},[443],[275,4774,307],{"className":4775,"style":449},[447,448],[275,4777,310],{"className":4778},[453],[275,4780],{"className":4781,"style":458},[457],[275,4783,313],{"className":4784},[462],[275,4786],{"className":4787,"style":458},[457],[275,4789,4791,4794,4825,4828,4831],{"className":4790},[430],[275,4792],{"className":4793,"style":1179},[434],[275,4795,4797],{"className":4796},[447,4339],[275,4798,4800],{"className":4799},[486],[275,4801,4803],{"className":4802},[491],[275,4804,4806,4814],{"className":4805,"style":1179},[495],[275,4807,4808,4811],{"style":2217},[275,4809],{"className":4810,"style":504},[503],[275,4812,321],{"className":4813},[447,448],[275,4815,4816,4819],{"style":2217},[275,4817],{"className":4818,"style":504},[503],[275,4820,4822],{"className":4821,"style":4366},[4365],[275,4823,4314],{"className":4824},[447],[275,4826],{"className":4827,"style":1166},[457],[275,4829,324],{"className":4830},[527],[275,4832],{"className":4833,"style":1166},[457],[275,4835,4837,4840],{"className":4836},[430],[275,4838],{"className":4839,"style":4605},[434],[275,4841,4843],{"className":4842},[447,4339],[275,4844,4846],{"className":4845},[486],[275,4847,4849],{"className":4848},[491],[275,4850,4852,4860],{"className":4851,"style":4605},[495],[275,4853,4854,4857],{"style":2217},[275,4855],{"className":4856,"style":504},[503],[275,4858,327],{"className":4859},[447,448],[275,4861,4862,4865],{"style":4616},[275,4863],{"className":4864,"style":504},[503],[275,4866,4868],{"className":4867,"style":4366},[4365],[275,4869,4314],{"className":4870},[447],[16,4872,4873,4874,4877,4878,4881,4882,4885],{},"归一化后，",[20,4875,4876],{},"内积直接等于余弦相似度","。归一化有两个好处：一是所有向量落在同一个单位球面上，距离比较公平；二是",[20,4879,4880],{},"省一次除法","—— 模型直接输出归一化向量，查询时一个点积完事。insightface 的 ",[130,4883,4884],{},"normed_embedding"," 就是这个东西。",[261,4887,4889],{"id":4888},"_32-对比学习clip-是怎么学出这个空间的","3.2 对比学习：CLIP 是怎么「学」出这个空间的",[16,4891,4892,4893,4896],{},"余弦相似度只是尺子，",[20,4894,4895],{},"尺子本身是训练出来的","。CLIP 的核心不是模型结构，而是它的训练目标 —— 对比学习（contrastive learning）。",[16,4898,4899,4900,4931,4932,5006,5007,5080,5081,5133],{},"取一个 batch 的 ",[275,4901,4903,4917],{"className":4902},[278],[275,4904,4906],{"className":4905},[282],[284,4907,4908],{"xmlns":286},[288,4909,4910,4915],{},[291,4911,4912],{},[294,4913,4914],{},"N",[418,4916,4914],{"encoding":420},[275,4918,4920],{"className":4919,"ariaHidden":426},[425],[275,4921,4923,4927],{"className":4922},[430],[275,4924],{"className":4925,"style":4926},[434],"height:0.6833em;",[275,4928,4914],{"className":4929,"style":4930},[447,448],"margin-right:0.109em;"," 对图文（图 ",[275,4933,4935,4954],{"className":4934},[278],[275,4936,4938],{"className":4937},[282],[284,4939,4940],{"xmlns":286},[288,4941,4942,4951],{},[291,4943,4944],{},[353,4945,4946,4949],{},[294,4947,4948],{},"I",[294,4950,360],{},[418,4952,4953],{"encoding":420},"I_i",[275,4955,4957],{"className":4956,"ariaHidden":426},[425],[275,4958,4960,4964],{"className":4959},[430],[275,4961],{"className":4962,"style":4963},[434],"height:0.8333em;vertical-align:-0.15em;",[275,4965,4967,4971],{"className":4966},[447],[275,4968,4948],{"className":4969,"style":4970},[447,448],"margin-right:0.0785em;",[275,4972,4974],{"className":4973},[672],[275,4975,4977,4998],{"className":4976},[486,487],[275,4978,4980,4995],{"className":4979},[491],[275,4981,4983],{"className":4982,"style":1265},[495],[275,4984,4986,4989],{"style":4985},"top:-2.55em;margin-left:-0.0785em;margin-right:0.05em;",[275,4987],{"className":4988,"style":1224},[503],[275,4990,4992],{"className":4991},[508,509,510,511],[275,4993,360],{"className":4994},[447,448,511],[275,4996,573],{"className":4997},[572],[275,4999,5001],{"className":5000},[491],[275,5002,5004],{"className":5003,"style":1287},[495],[275,5005],{}," 配文 ",[275,5008,5010,5029],{"className":5009},[278],[275,5011,5013],{"className":5012},[282],[284,5014,5015],{"xmlns":286},[288,5016,5017,5026],{},[291,5018,5019],{},[353,5020,5021,5024],{},[294,5022,5023],{},"T",[294,5025,360],{},[418,5027,5028],{"encoding":420},"T_i",[275,5030,5032],{"className":5031,"ariaHidden":426},[425],[275,5033,5035,5038],{"className":5034},[430],[275,5036],{"className":5037,"style":4963},[434],[275,5039,5041,5045],{"className":5040},[447],[275,5042,5023],{"className":5043,"style":5044},[447,448],"margin-right:0.1389em;",[275,5046,5048],{"className":5047},[672],[275,5049,5051,5072],{"className":5050},[486,487],[275,5052,5054,5069],{"className":5053},[491],[275,5055,5057],{"className":5056,"style":1265},[495],[275,5058,5060,5063],{"style":5059},"top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;",[275,5061],{"className":5062,"style":1224},[503],[275,5064,5066],{"className":5065},[508,509,510,511],[275,5067,360],{"className":5068},[447,448,511],[275,5070,573],{"className":5071},[572],[275,5073,5075],{"className":5074},[491],[275,5076,5078],{"className":5077,"style":1287},[495],[275,5079],{},"），算 ",[275,5082,5084,5102],{"className":5083},[278],[275,5085,5087],{"className":5086},[282],[284,5088,5089],{"xmlns":286},[288,5090,5091,5099],{},[291,5092,5093,5095,5097],{},[294,5094,4914],{},[298,5096,1847],{},[294,5098,4914],{},[418,5100,5101],{"encoding":420},"N \\times N",[275,5103,5105,5124],{"className":5104,"ariaHidden":426},[425],[275,5106,5108,5112,5115,5118,5121],{"className":5107},[430],[275,5109],{"className":5110,"style":5111},[434],"height:0.7667em;vertical-align:-0.0833em;",[275,5113,4914],{"className":5114,"style":4930},[447,448],[275,5116],{"className":5117,"style":1166},[457],[275,5119,1847],{"className":5120},[527],[275,5122],{"className":5123,"style":1166},[457],[275,5125,5127,5130],{"className":5126},[430],[275,5128],{"className":5129,"style":4926},[434],[275,5131,4914],{"className":5132,"style":4930},[447,448]," 的相似度矩阵，对角线是正确配对。损失用带温度系数的 InfoNCE（也叫多类 NCE）：",[16,5135,5136],{},[275,5137,5139,5194],{"className":5138},[278],[275,5140,5142],{"className":5141},[282],[284,5143,5144],{"xmlns":286},[288,5145,5146,5191],{},[291,5147,5148,5160,5162],{},[353,5149,5150,5153],{},[294,5151,5152],{},"s",[291,5154,5155,5157],{},[294,5156,360],{},[294,5158,5159],{},"j",[298,5161,313],{},[315,5163,5164,5188],{},[291,5165,5166,5168,5170,5172,5178,5180,5186],{},[294,5167,296],{},[298,5169,300],{},[298,5171,304],{"stretchy":303},[353,5173,5174,5176],{},[294,5175,4948],{},[294,5177,360],{},[298,5179,1589],{"separator":426},[353,5181,5182,5184],{},[294,5183,5023],{},[294,5185,5159],{},[298,5187,310],{"stretchy":303},[294,5189,5190],{},"τ",[418,5192,5193],{"encoding":420},"s_{ij} = \\frac{\\cos(I_i, T_j)}{\\tau}",[275,5195,5197,5259],{"className":5196,"ariaHidden":426},[425],[275,5198,5200,5204,5250,5253,5256],{"className":5199},[430],[275,5201],{"className":5202,"style":5203},[434],"height:0.7167em;vertical-align:-0.2861em;",[275,5205,5207,5210],{"className":5206},[447],[275,5208,5152],{"className":5209},[447,448],[275,5211,5213],{"className":5212},[672],[275,5214,5216,5241],{"className":5215},[486,487],[275,5217,5219,5238],{"className":5218},[491],[275,5220,5222],{"className":5221,"style":1265},[495],[275,5223,5224,5227],{"style":1268},[275,5225],{"className":5226,"style":1224},[503],[275,5228,5230],{"className":5229},[508,509,510,511],[275,5231,5233],{"className":5232},[447,511],[275,5234,5237],{"className":5235,"style":5236},[447,448,511],"margin-right:0.0572em;","ij",[275,5239,573],{"className":5240},[572],[275,5242,5244],{"className":5243},[491],[275,5245,5248],{"className":5246,"style":5247},[495],"height:0.2861em;",[275,5249],{},[275,5251],{"className":5252,"style":458},[457],[275,5254,313],{"className":5255},[462],[275,5257],{"className":5258,"style":458},[457],[275,5260,5262,5266],{"className":5261},[430],[275,5263],{"className":5264,"style":5265},[434],"height:1.3773em;vertical-align:-0.345em;",[275,5267,5269,5272,5436],{"className":5268},[447],[275,5270],{"className":5271},[443,479],[275,5273,5275],{"className":5274},[315],[275,5276,5278,5428],{"className":5277},[486,487],[275,5279,5281,5425],{"className":5280},[491],[275,5282,5285,5300,5308],{"className":5283,"style":5284},[495],"height:1.0323em;",[275,5286,5287,5290],{"style":499},[275,5288],{"className":5289,"style":504},[503],[275,5291,5293],{"className":5292},[508,509,510,511],[275,5294,5296],{"className":5295},[447,511],[275,5297,5190],{"className":5298,"style":5299},[447,448,511],"margin-right:0.1132em;",[275,5301,5302,5305],{"style":539},[275,5303],{"className":5304,"style":504},[503],[275,5306],{"className":5307,"style":547},[546],[275,5309,5311,5314],{"style":5310},"top:-3.5073em;",[275,5312],{"className":5313,"style":504},[503],[275,5315,5317],{"className":5316},[508,509,510,511],[275,5318,5320,5333,5336,5377,5380,5422],{"className":5319},[447,511],[275,5321,5323,5326,5330],{"className":5322},[439,511],[275,5324,3105],{"className":5325},[511],[275,5327,5329],{"className":5328},[511],"o",[275,5331,5152],{"className":5332},[511],[275,5334,304],{"className":5335},[443,511],[275,5337,5339,5342],{"className":5338},[447,511],[275,5340,4948],{"className":5341,"style":4970},[447,448,511],[275,5343,5345],{"className":5344},[672],[275,5346,5348,5369],{"className":5347},[486,487],[275,5349,5351,5366],{"className":5350},[491],[275,5352,5354],{"className":5353,"style":1026},[495],[275,5355,5357,5360],{"style":5356},"top:-2.357em;margin-left:-0.0785em;margin-right:0.0714em;",[275,5358],{"className":5359,"style":689},[503],[275,5361,5363],{"className":5362},[508,693,694,511],[275,5364,360],{"className":5365},[447,448,511],[275,5367,573],{"className":5368},[572],[275,5370,5372],{"className":5371},[491],[275,5373,5375],{"className":5374,"style":1048},[495],[275,5376],{},[275,5378,1589],{"className":5379},[1619,511],[275,5381,5383,5386],{"className":5382},[447,511],[275,5384,5023],{"className":5385,"style":5044},[447,448,511],[275,5387,5389],{"className":5388},[672],[275,5390,5392,5413],{"className":5391},[486,487],[275,5393,5395,5410],{"className":5394},[491],[275,5396,5398],{"className":5397,"style":1026},[495],[275,5399,5401,5404],{"style":5400},"top:-2.357em;margin-left:-0.1389em;margin-right:0.0714em;",[275,5402],{"className":5403,"style":689},[503],[275,5405,5407],{"className":5406},[508,693,694,511],[275,5408,5159],{"className":5409,"style":5236},[447,448,511],[275,5411,573],{"className":5412},[572],[275,5414,5416],{"className":5415},[491],[275,5417,5420],{"className":5418,"style":5419},[495],"height:0.2819em;",[275,5421],{},[275,5423,310],{"className":5424},[453,511],[275,5426,573],{"className":5427},[572],[275,5429,5431],{"className":5430},[491],[275,5432,5434],{"className":5433,"style":3038},[495],[275,5435],{},[275,5437],{"className":5438},[453,479],[16,5440,5441],{},[275,5442,5444,5527],{"className":5443},[278],[275,5445,5447],{"className":5446},[282],[284,5448,5449],{"xmlns":286},[288,5450,5451,5524],{},[291,5452,5453,5460,5462,5464,5467,5469],{},[353,5454,5455,5458],{},[294,5456,5457],{},"L",[294,5459,360],{},[298,5461,313],{},[298,5463,1583],{},[294,5465,5466],{},"log",[298,5468,300],{},[291,5470,5471,5473,5522],{},[298,5472,1580],{"fence":426},[315,5474,5475,5496],{},[291,5476,5477,5480,5482,5484,5494],{},[294,5478,5479],{},"exp",[298,5481,300],{},[298,5483,304],{"stretchy":303},[353,5485,5486,5488],{},[294,5487,5152],{},[291,5489,5490,5492],{},[294,5491,360],{},[294,5493,360],{},[298,5495,310],{"stretchy":303},[291,5497,5498,5504,5506,5508,5510,5520],{},[353,5499,5500,5502],{},[298,5501,357],{},[294,5503,5159],{},[294,5505,5479],{},[298,5507,300],{},[298,5509,304],{"stretchy":303},[353,5511,5512,5514],{},[294,5513,5152],{},[291,5515,5516,5518],{},[294,5517,360],{},[294,5519,5159],{},[298,5521,310],{"stretchy":303},[298,5523,1594],{"fence":426},[418,5525,5526],{"encoding":420},"L_i = -\\log\\left[ \\frac{\\exp(s_{ii})}{\\sum_j \\exp(s_{ij})} \\right]",[275,5528,5530,5585],{"className":5529,"ariaHidden":426},[425],[275,5531,5533,5536,5576,5579,5582],{"className":5532},[430],[275,5534],{"className":5535,"style":4963},[434],[275,5537,5539,5542],{"className":5538},[447],[275,5540,5457],{"className":5541},[447,448],[275,5543,5545],{"className":5544},[672],[275,5546,5548,5568],{"className":5547},[486,487],[275,5549,5551,5565],{"className":5550},[491],[275,5552,5554],{"className":5553,"style":1265},[495],[275,5555,5556,5559],{"style":1268},[275,5557],{"className":5558,"style":1224},[503],[275,5560,5562],{"className":5561},[508,509,510,511],[275,5563,360],{"className":5564},[447,448,511],[275,5566,573],{"className":5567},[572],[275,5569,5571],{"className":5570},[491],[275,5572,5574],{"className":5573,"style":1287},[495],[275,5575],{},[275,5577],{"className":5578,"style":458},[457],[275,5580,313],{"className":5581},[462],[275,5583],{"className":5584,"style":458},[457],[275,5586,5588,5592,5595,5598,5606,5609],{"className":5587},[430],[275,5589],{"className":5590,"style":5591},[434],"height:1.8172em;vertical-align:-0.6672em;",[275,5593,1583],{"className":5594},[447],[275,5596],{"className":5597,"style":1246},[457],[275,5599,5601,5602],{"className":5600},[439],"lo",[275,5603,5605],{"style":5604},"margin-right:0.0139em;","g",[275,5607],{"className":5608,"style":1246},[457],[275,5610,5613,5623,5857],{"className":5611},[5612],"minner",[275,5614,5618],{"className":5615,"style":5617},[443,5616],"delimcenter","top:0em;",[275,5619,1580],{"className":5620},[5621,5622],"delimsizing","size2",[275,5624,5626,5629,5854],{"className":5625},[447],[275,5627],{"className":5628},[443,479],[275,5630,5632],{"className":5631},[315],[275,5633,5635,5845],{"className":5634},[486,487],[275,5636,5638,5842],{"className":5637},[491],[275,5639,5642,5760,5768],{"className":5640,"style":5641},[495],"height:1.01em;",[275,5643,5644,5647],{"style":499},[275,5645],{"className":5646,"style":504},[503],[275,5648,5650],{"className":5649},[508,509,510,511],[275,5651,5653,5694,5697,5711,5714,5757],{"className":5652},[447,511],[275,5654,5656,5659],{"className":5655},[439,511],[275,5657,357],{"className":5658,"style":668},[439,666,667,511],[275,5660,5662],{"className":5661},[672],[275,5663,5665,5685],{"className":5664},[486,487],[275,5666,5668,5682],{"className":5667},[491],[275,5669,5671],{"className":5670,"style":682},[495],[275,5672,5673,5676],{"style":685},[275,5674],{"className":5675,"style":689},[503],[275,5677,5679],{"className":5678},[508,693,694,511],[275,5680,5159],{"className":5681,"style":5236},[447,448,511],[275,5683,573],{"className":5684},[572],[275,5686,5688],{"className":5687},[491],[275,5689,5692],{"className":5690,"style":5691},[495],"height:0.4603em;",[275,5693],{},[275,5695],{"className":5696,"style":713},[457,511],[275,5698,5700,5704,5708],{"className":5699},[439,511],[275,5701,5703],{"className":5702},[511],"e",[275,5705,5707],{"className":5706},[511],"x",[275,5709,16],{"className":5710},[511],[275,5712,304],{"className":5713},[443,511],[275,5715,5717,5720],{"className":5716},[447,511],[275,5718,5152],{"className":5719},[447,448,511],[275,5721,5723],{"className":5722},[672],[275,5724,5726,5749],{"className":5725},[486,487],[275,5727,5729,5746],{"className":5728},[491],[275,5730,5732],{"className":5731,"style":1026},[495],[275,5733,5734,5737],{"style":1029},[275,5735],{"className":5736,"style":689},[503],[275,5738,5740],{"className":5739},[508,693,694,511],[275,5741,5743],{"className":5742},[447,511],[275,5744,5237],{"className":5745,"style":5236},[447,448,511],[275,5747,573],{"className":5748},[572],[275,5750,5752],{"className":5751},[491],[275,5753,5755],{"className":5754,"style":5419},[495],[275,5756],{},[275,5758,310],{"className":5759},[453,511],[275,5761,5762,5765],{"style":539},[275,5763],{"className":5764,"style":504},[503],[275,5766],{"className":5767,"style":547},[546],[275,5769,5771,5774],{"style":5770},"top:-3.485em;",[275,5772],{"className":5773,"style":504},[503],[275,5775,5777],{"className":5776},[508,509,510,511],[275,5778,5780,5792,5795,5839],{"className":5779},[447,511],[275,5781,5783,5786,5789],{"className":5782},[439,511],[275,5784,5703],{"className":5785},[511],[275,5787,5707],{"className":5788},[511],[275,5790,16],{"className":5791},[511],[275,5793,304],{"className":5794},[443,511],[275,5796,5798,5801],{"className":5797},[447,511],[275,5799,5152],{"className":5800},[447,448,511],[275,5802,5804],{"className":5803},[672],[275,5805,5807,5831],{"className":5806},[486,487],[275,5808,5810,5828],{"className":5809},[491],[275,5811,5813],{"className":5812,"style":1026},[495],[275,5814,5815,5818],{"style":1029},[275,5816],{"className":5817,"style":689},[503],[275,5819,5821],{"className":5820},[508,693,694,511],[275,5822,5824],{"className":5823},[447,511],[275,5825,5827],{"className":5826},[447,448,511],"ii",[275,5829,573],{"className":5830},[572],[275,5832,5834],{"className":5833},[491],[275,5835,5837],{"className":5836,"style":1048},[495],[275,5838],{},[275,5840,310],{"className":5841},[453,511],[275,5843,573],{"className":5844},[572],[275,5846,5848],{"className":5847},[491],[275,5849,5852],{"className":5850,"style":5851},[495],"height:0.6672em;",[275,5853],{},[275,5855],{"className":5856},[453,479],[275,5858,5860],{"className":5859,"style":5617},[453,5616],[275,5861,1594],{"className":5862},[5621,5622],[16,5864,5865],{},[275,5866,5868,5926],{"className":5867},[278],[275,5869,5871],{"className":5870},[282],[284,5872,5873],{"xmlns":286},[288,5874,5875,5923],{},[291,5876,5877,5879,5881,5891],{},[294,5878,5457],{},[298,5880,313],{},[315,5882,5883,5885],{},[394,5884,1586],{},[291,5886,5887,5889],{},[394,5888,396],{},[294,5890,4914],{},[291,5892,5893,5895,5901,5907,5909,5915,5921],{},[298,5894,304],{"fence":426},[353,5896,5897,5899],{},[298,5898,357],{},[294,5900,360],{},[353,5902,5903,5905],{},[294,5904,5457],{},[294,5906,360],{},[298,5908,1852],{},[353,5910,5911,5913],{},[298,5912,357],{},[294,5914,5159],{},[353,5916,5917,5919],{},[294,5918,5457],{},[294,5920,5159],{},[298,5922,310],{"fence":426},[418,5924,5925],{"encoding":420},"L = \\frac{1}{2N}\\left( \\sum_i L_i + \\sum_j L_j \\right)",[275,5927,5929,5947],{"className":5928,"ariaHidden":426},[425],[275,5930,5932,5935,5938,5941,5944],{"className":5931},[430],[275,5933],{"className":5934,"style":4926},[434],[275,5936,5457],{"className":5937},[447,448],[275,5939],{"className":5940,"style":458},[457],[275,5942,313],{"className":5943},[462],[275,5945],{"className":5946,"style":458},[457],[275,5948,5950,5954,6025,6028],{"className":5949},[430],[275,5951],{"className":5952,"style":5953},[434],"height:1.8em;vertical-align:-0.65em;",[275,5955,5957,5960,6022],{"className":5956},[447],[275,5958],{"className":5959},[443,479],[275,5961,5963],{"className":5962},[315],[275,5964,5966,6014],{"className":5965},[486,487],[275,5967,5969,6011],{"className":5968},[491],[275,5970,5972,5989,5997],{"className":5971,"style":2901},[495],[275,5973,5974,5977],{"style":499},[275,5975],{"className":5976,"style":504},[503],[275,5978,5980],{"className":5979},[508,509,510,511],[275,5981,5983,5986],{"className":5982},[447,511],[275,5984,396],{"className":5985},[447,511],[275,5987,4914],{"className":5988,"style":4930},[447,448,511],[275,5990,5991,5994],{"style":539},[275,5992],{"className":5993,"style":504},[503],[275,5995],{"className":5996,"style":547},[546],[275,5998,5999,6002],{"style":550},[275,6000],{"className":6001,"style":504},[503],[275,6003,6005],{"className":6004},[508,509,510,511],[275,6006,6008],{"className":6007},[447,511],[275,6009,1586],{"className":6010},[447,511],[275,6012,573],{"className":6013},[572],[275,6015,6017],{"className":6016},[491],[275,6018,6020],{"className":6019,"style":3038},[495],[275,6021],{},[275,6023],{"className":6024},[453,479],[275,6026],{"className":6027,"style":1246},[457],[275,6029,6031,6037,6077,6080,6120,6123,6126,6129,6170,6173,6213],{"className":6030},[5612],[275,6032,6034],{"className":6033,"style":5617},[443,5616],[275,6035,304],{"className":6036},[5621,5622],[275,6038,6040,6043],{"className":6039},[439],[275,6041,357],{"className":6042,"style":668},[439,666,667],[275,6044,6046],{"className":6045},[672],[275,6047,6049,6069],{"className":6048},[486,487],[275,6050,6052,6066],{"className":6051},[491],[275,6053,6055],{"className":6054,"style":1217},[495],[275,6056,6057,6060],{"style":1220},[275,6058],{"className":6059,"style":1224},[503],[275,6061,6063],{"className":6062},[508,509,510,511],[275,6064,360],{"className":6065},[447,448,511],[275,6067,573],{"className":6068},[572],[275,6070,6072],{"className":6071},[491],[275,6073,6075],{"className":6074,"style":1240},[495],[275,6076],{},[275,6078],{"className":6079,"style":1246},[457],[275,6081,6083,6086],{"className":6082},[447],[275,6084,5457],{"className":6085},[447,448],[275,6087,6089],{"className":6088},[672],[275,6090,6092,6112],{"className":6091},[486,487],[275,6093,6095,6109],{"className":6094},[491],[275,6096,6098],{"className":6097,"style":1265},[495],[275,6099,6100,6103],{"style":1268},[275,6101],{"className":6102,"style":1224},[503],[275,6104,6106],{"className":6105},[508,509,510,511],[275,6107,360],{"className":6108},[447,448,511],[275,6110,573],{"className":6111},[572],[275,6113,6115],{"className":6114},[491],[275,6116,6118],{"className":6117,"style":1287},[495],[275,6119],{},[275,6121],{"className":6122,"style":1166},[457],[275,6124,1852],{"className":6125},[527],[275,6127],{"className":6128,"style":1166},[457],[275,6130,6132,6135],{"className":6131},[439],[275,6133,357],{"className":6134,"style":668},[439,666,667],[275,6136,6138],{"className":6137},[672],[275,6139,6141,6161],{"className":6140},[486,487],[275,6142,6144,6158],{"className":6143},[491],[275,6145,6147],{"className":6146,"style":1217},[495],[275,6148,6149,6152],{"style":1220},[275,6150],{"className":6151,"style":1224},[503],[275,6153,6155],{"className":6154},[508,509,510,511],[275,6156,5159],{"className":6157,"style":5236},[447,448,511],[275,6159,573],{"className":6160},[572],[275,6162,6164],{"className":6163},[491],[275,6165,6168],{"className":6166,"style":6167},[495],"height:0.4358em;",[275,6169],{},[275,6171],{"className":6172,"style":1246},[457],[275,6174,6176,6179],{"className":6175},[447],[275,6177,5457],{"className":6178},[447,448],[275,6180,6182],{"className":6181},[672],[275,6183,6185,6205],{"className":6184},[486,487],[275,6186,6188,6202],{"className":6187},[491],[275,6189,6191],{"className":6190,"style":1265},[495],[275,6192,6193,6196],{"style":1268},[275,6194],{"className":6195,"style":1224},[503],[275,6197,6199],{"className":6198},[508,509,510,511],[275,6200,5159],{"className":6201,"style":5236},[447,448,511],[275,6203,573],{"className":6204},[572],[275,6206,6208],{"className":6207},[491],[275,6209,6211],{"className":6210,"style":5247},[495],[275,6212],{},[275,6214,6216],{"className":6215,"style":5617},[453,5616],[275,6217,310],{"className":6218},[5621,5622],[16,6220,1108,6221,6250,6251,6260],{},[275,6222,6224,6238],{"className":6223},[278],[275,6225,6227],{"className":6226},[282],[284,6228,6229],{"xmlns":286},[288,6230,6231,6235],{},[291,6232,6233],{},[294,6234,5190],{},[418,6236,6237],{"encoding":420},"\\tau",[275,6239,6241],{"className":6240,"ariaHidden":426},[425],[275,6242,6244,6247],{"className":6243},[430],[275,6245],{"className":6246,"style":1714},[434],[275,6248,5190],{"className":6249,"style":5299},[447,448]," 是温度系数。这个式子等价于：",[20,6252,6253,6254,6259],{},"对第 ",[20,6255,6256],{},[20,6257,6258],{}," "," 行做 softmax，目标是对角线位置概率为 1","。逐项看：",[25,6262,6263,6361,6509],{},[28,6264,6265,6266,6360],{},"分子 ",[275,6267,6269,6299],{"className":6268},[278],[275,6270,6272],{"className":6271},[282],[284,6273,6274],{"xmlns":286},[288,6275,6276,6296],{},[291,6277,6278,6280,6282,6284,6294],{},[294,6279,5479],{},[298,6281,300],{},[298,6283,304],{"stretchy":303},[353,6285,6286,6288],{},[294,6287,5152],{},[291,6289,6290,6292],{},[294,6291,360],{},[294,6293,360],{},[298,6295,310],{"stretchy":303},[418,6297,6298],{"encoding":420},"\\exp(s_{ii})",[275,6300,6302],{"className":6301,"ariaHidden":426},[425],[275,6303,6305,6308,6311,6314,6357],{"className":6304},[430],[275,6306],{"className":6307,"style":435},[434],[275,6309,5479],{"className":6310},[439],[275,6312,304],{"className":6313},[443],[275,6315,6317,6320],{"className":6316},[447],[275,6318,5152],{"className":6319},[447,448],[275,6321,6323],{"className":6322},[672],[275,6324,6326,6349],{"className":6325},[486,487],[275,6327,6329,6346],{"className":6328},[491],[275,6330,6332],{"className":6331,"style":1265},[495],[275,6333,6334,6337],{"style":1268},[275,6335],{"className":6336,"style":1224},[503],[275,6338,6340],{"className":6339},[508,509,510,511],[275,6341,6343],{"className":6342},[447,511],[275,6344,5827],{"className":6345},[447,448,511],[275,6347,573],{"className":6348},[572],[275,6350,6352],{"className":6351},[491],[275,6353,6355],{"className":6354,"style":1287},[495],[275,6356],{},[275,6358,310],{"className":6359},[453],"：正确配对要尽量相似，分数越高越好；",[28,6362,6363,6364,6508],{},"分母 ",[275,6365,6367,6403],{"className":6366},[278],[275,6368,6370],{"className":6369},[282],[284,6371,6372],{"xmlns":286},[288,6373,6374,6400],{},[291,6375,6376,6382,6384,6386,6388,6398],{},[353,6377,6378,6380],{},[298,6379,357],{},[294,6381,5159],{},[294,6383,5479],{},[298,6385,300],{},[298,6387,304],{"stretchy":303},[353,6389,6390,6392],{},[294,6391,5152],{},[291,6393,6394,6396],{},[294,6395,360],{},[294,6397,5159],{},[298,6399,310],{"stretchy":303},[418,6401,6402],{"encoding":420},"\\sum_j \\exp(s_{ij})",[275,6404,6406],{"className":6405,"ariaHidden":426},[425],[275,6407,6409,6413,6453,6456,6459,6462,6505],{"className":6408},[430],[275,6410],{"className":6411,"style":6412},[434],"height:1.1858em;vertical-align:-0.4358em;",[275,6414,6416,6419],{"className":6415},[439],[275,6417,357],{"className":6418,"style":668},[439,666,667],[275,6420,6422],{"className":6421},[672],[275,6423,6425,6445],{"className":6424},[486,487],[275,6426,6428,6442],{"className":6427},[491],[275,6429,6431],{"className":6430,"style":1217},[495],[275,6432,6433,6436],{"style":1220},[275,6434],{"className":6435,"style":1224},[503],[275,6437,6439],{"className":6438},[508,509,510,511],[275,6440,5159],{"className":6441,"style":5236},[447,448,511],[275,6443,573],{"className":6444},[572],[275,6446,6448],{"className":6447},[491],[275,6449,6451],{"className":6450,"style":6167},[495],[275,6452],{},[275,6454],{"className":6455,"style":1246},[457],[275,6457,5479],{"className":6458},[439],[275,6460,304],{"className":6461},[443],[275,6463,6465,6468],{"className":6464},[447],[275,6466,5152],{"className":6467},[447,448],[275,6469,6471],{"className":6470},[672],[275,6472,6474,6497],{"className":6473},[486,487],[275,6475,6477,6494],{"className":6476},[491],[275,6478,6480],{"className":6479,"style":1265},[495],[275,6481,6482,6485],{"style":1268},[275,6483],{"className":6484,"style":1224},[503],[275,6486,6488],{"className":6487},[508,509,510,511],[275,6489,6491],{"className":6490},[447,511],[275,6492,5237],{"className":6493,"style":5236},[447,448,511],[275,6495,573],{"className":6496},[572],[275,6498,6500],{"className":6499},[491],[275,6501,6503],{"className":6502,"style":5247},[495],[275,6504],{},[275,6506,310],{"className":6507},[453],"：所有配对（含错误的）一起归一化，逼着模型把负样本的分数压低；",[28,6510,6511,6512,4175,6540,23,6543,6571,6572,6600],{},"温度 ",[275,6513,6515,6528],{"className":6514},[278],[275,6516,6518],{"className":6517},[282],[284,6519,6520],{"xmlns":286},[288,6521,6522,6526],{},[291,6523,6524],{},[294,6525,5190],{},[418,6527,6237],{"encoding":420},[275,6529,6531],{"className":6530,"ariaHidden":426},[425],[275,6532,6534,6537],{"className":6533},[430],[275,6535],{"className":6536,"style":1714},[434],[275,6538,5190],{"className":6539,"style":5299},[447,448],[20,6541,6542],{},"缩放整个相似度分布",[275,6544,6546,6559],{"className":6545},[278],[275,6547,6549],{"className":6548},[282],[284,6550,6551],{"xmlns":286},[288,6552,6553,6557],{},[291,6554,6555],{},[294,6556,5190],{},[418,6558,6237],{"encoding":420},[275,6560,6562],{"className":6561,"ariaHidden":426},[425],[275,6563,6565,6568],{"className":6564},[430],[275,6566],{"className":6567,"style":1714},[434],[275,6569,5190],{"className":6570,"style":5299},[447,448]," 越小，softmax 越尖锐，模型对「难分」的负样本越敏感，训练越激进；",[275,6573,6575,6588],{"className":6574},[278],[275,6576,6578],{"className":6577},[282],[284,6579,6580],{"xmlns":286},[288,6581,6582,6586],{},[291,6583,6584],{},[294,6585,5190],{},[418,6587,6237],{"encoding":420},[275,6589,6591],{"className":6590,"ariaHidden":426},[425],[275,6592,6594,6597],{"className":6593},[430],[275,6595],{"className":6596,"style":1714},[434],[275,6598,5190],{"className":6599,"style":5299},[447,448]," 太大则梯度消失，学不动。",[123,6602,6605],{"className":6603,"code":6604,"language":128},[126],"   文本1  文本2  文本3\n图1  ✓    ✗     ✗\n图2  ✗    ✓     ✗      ← 对角线为正确配对（InfoNCE 拉近）\n图3  ✗    ✗     ✓        非对角线为负样本（推远）\n",[130,6606,6604],{"__ignoreMap":132},[16,6608,6609,6610,6613,6614,6617,6618,6621],{},"训练完成后，模型学到了一个",[20,6611,6612],{},"嵌入函数 **** ","：任何图、任何句子，经过它都映射成 512 维向量，并且",[20,6615,6616],{},"语义相近的对象在向量空间里距离近","。这整套思路在机器学习里叫",[20,6619,6620],{},"度量学习（metric learning）","—— 不直接学「这是猫」，而是学「猫和猫的向量该靠多近」。",[261,6623,6625],{"id":6624},"_33-傅里叶变换到底在哪它管压缩不管理解","3.3 傅里叶变换到底在哪：它管压缩，不管理解",[16,6627,6628,6629,4175],{},"既然你问到傅里叶，那就把它在相册链路里的位置讲清楚 ——",[20,6630,6631],{},"它真实存在，但负责的是图像压缩，不是语义识别",[25,6633,6634,6644,6650],{},[28,6635,6636,6639,6640,6643],{},[20,6637,6638],{},"JPEG \u002F WebP 的 DCT（离散余弦变换）","：DCT 是离散傅里叶变换（DFT）的实值变体。压缩时把图像切成 8×8 的像素块，每个块做 DCT，得到 64 个频域系数 —— 低频在前、高频在后，然后",[20,6641,6642],{},"丢掉人眼不敏感的高频分量","，实现几倍到几十倍的压缩。你在相册里看到的预览图、缩略图，全都经过这一层；",[28,6645,6646,6649],{},[20,6647,6648],{},"清晰度 \u002F 模糊检测","：模糊照片在频域上就是高频能量衰减，可以用频域指标评估；",[28,6651,6652,6655,6656,6801,6802,6805],{},[20,6653,6654],{},"CNN 卷积与傅里叶的联系","：卷积定理 ",[275,6657,6659,6706],{"className":6658},[278],[275,6660,6662],{"className":6661},[282],[284,6663,6664],{"xmlns":286},[288,6665,6666,6703],{},[291,6667,6668,6671,6673,6676,6679,6681,6683,6685,6687,6689,6691,6693,6695,6697,6699,6701],{},[294,6669,6670],{},"F",[298,6672,304],{"stretchy":303},[294,6674,6675],{},"f",[298,6677,6678],{},"∗",[294,6680,5605],{},[298,6682,310],{"stretchy":303},[298,6684,313],{},[294,6686,6670],{},[298,6688,304],{"stretchy":303},[294,6690,6675],{},[298,6692,310],{"stretchy":303},[298,6694,324],{},[294,6696,6670],{},[298,6698,304],{"stretchy":303},[294,6700,5605],{},[298,6702,310],{"stretchy":303},[418,6704,6705],{"encoding":420},"F(f \\ast g) = F(f) \\cdot F(g)",[275,6707,6709,6734,6756,6783],{"className":6708,"ariaHidden":426},[425],[275,6710,6712,6715,6718,6721,6725,6728,6731],{"className":6711},[430],[275,6713],{"className":6714,"style":435},[434],[275,6716,6670],{"className":6717,"style":5044},[447,448],[275,6719,304],{"className":6720},[443],[275,6722,6675],{"className":6723,"style":6724},[447,448],"margin-right:0.1076em;",[275,6726],{"className":6727,"style":1166},[457],[275,6729,6678],{"className":6730},[527],[275,6732],{"className":6733,"style":1166},[457],[275,6735,6737,6740,6744,6747,6750,6753],{"className":6736},[430],[275,6738],{"className":6739,"style":435},[434],[275,6741,5605],{"className":6742,"style":6743},[447,448],"margin-right:0.0359em;",[275,6745,310],{"className":6746},[453],[275,6748],{"className":6749,"style":458},[457],[275,6751,313],{"className":6752},[462],[275,6754],{"className":6755,"style":458},[457],[275,6757,6759,6762,6765,6768,6771,6774,6777,6780],{"className":6758},[430],[275,6760],{"className":6761,"style":435},[434],[275,6763,6670],{"className":6764,"style":5044},[447,448],[275,6766,304],{"className":6767},[443],[275,6769,6675],{"className":6770,"style":6724},[447,448],[275,6772,310],{"className":6773},[453],[275,6775],{"className":6776,"style":1166},[457],[275,6778,324],{"className":6779},[527],[275,6781],{"className":6782,"style":1166},[457],[275,6784,6786,6789,6792,6795,6798],{"className":6785},[430],[275,6787],{"className":6788,"style":435},[434],[275,6790,6670],{"className":6791,"style":5044},[447,448],[275,6793,304],{"className":6794},[443],[275,6796,5605],{"className":6797,"style":6743},[447,448],[275,6799,310],{"className":6800},[453]," 说「时域卷积 = 频域相乘」，理论上可以用 FFT 加速卷积。但 ONNX Runtime 实际推理用的是直接卷积和 Winograd 算法，",[20,6803,6804],{},"不依赖 FFT","—— 这是实现细节，不是设计思想。",[16,6807,6808,6809,6812],{},"一句话总结：",[20,6810,6811],{},"傅里叶管「像素的频域结构」，深度学习管「像素的语义」","。CLIP 和人脸模型要回答的是「画面里有什么、这是谁」，这种高层语义没有固定的频域特征，只能靠数据驱动学出来。而信号系统（滤波、卷积）在 CNN 内部确实存在 —— 每个卷积核就是一组可学习的滤波器，但它只是构建特征的手段，不是相册系统设计的主线数学。",[11,6814,6816],{"id":6815},"_4-语义搜索clip-双塔模型","4 语义搜索：CLIP 双塔模型",[261,6818,6820],{"id":6819},"_41-为什么不能用打标签","4.1 为什么不能用「打标签」",[16,6822,6823,6824,6827,6828,6827,6831,6834],{},"传统图片搜索是给每张图人工打标签（",[130,6825,6826],{},"海滩","、",[130,6829,6830],{},"日落",[130,6832,6833],{},"人","），再按标签匹配。这条路在个人相册场景直接死掉：",[25,6836,6837,6843,6849],{},[28,6838,6839,6842],{},[20,6840,6841],{},"标签穷举不完","。「灯火通明的街道」这种描述，事前根本想不到要打这个标签；",[28,6844,6845,6848],{},[20,6846,6847],{},"组合语义没法枚举","。「海边看日落」是「海 + 日落 + 人在场」的语义组合，不是三个标签的简单叠加；",[28,6850,6851,6854],{},[20,6852,6853],{},"召回靠运气","。标签没打准，照片就永远搜不到。",[16,6856,6857,6858,6861],{},"CLIP 的思路完全不同：",[20,6859,6860],{},"不生成任何标签，直接把图和句子映射到同一个向量空间","，让「一张图」和「一句描述它的话」在空间里离得足够近。",[261,6863,6865],{"id":6864},"_42-双塔编码器","4.2 双塔编码器",[16,6867,6868],{},"CLIP（Contrastive Language–Image Pre-training）由两个独立编码器组成：",[25,6870,6871,6876],{},[28,6872,6873,6875],{},[20,6874,247],{},"：用 ViT（如 ViT-B\u002F32）或 ResNet 系列，把图片编码成向量；",[28,6877,6878,6881],{},[20,6879,6880],{},"文本编码器","：基于 Transformer，把句子编码成向量。",[16,6883,6884,6885,6888,6889,6892],{},"两个编码器的输出经过投影层对齐到",[20,6886,6887],{},"同一维度","（如 512 维）。训练目标就是 3.2 节的 InfoNCE：",[20,6890,6891],{},"「猫的图片」和「一只猫」这两个向量在空间里距离很近","，而与「一辆车」的向量距离很远。这样一来，图片和文字就被统一到了同一把「尺子」上。",[261,6894,6896],{"id":6895},"_43-对比学习训练","4.3 对比学习训练",[16,6898,6899],{},"训练数据是海量「图文对」（OpenAI 原始版本用了约 4 亿对网络图文）。流程：",[6901,6902,6903,6985,6988],"ol",{},[28,6904,4899,6905,6933,6934,6984],{},[275,6906,6908,6921],{"className":6907},[278],[275,6909,6911],{"className":6910},[282],[284,6912,6913],{"xmlns":286},[288,6914,6915,6919],{},[291,6916,6917],{},[294,6918,4914],{},[418,6920,4914],{"encoding":420},[275,6922,6924],{"className":6923,"ariaHidden":426},[425],[275,6925,6927,6930],{"className":6926},[430],[275,6928],{"className":6929,"style":4926},[434],[275,6931,4914],{"className":6932,"style":4930},[447,448]," 对图文，图像、文本分别过两个编码器，得到 ",[275,6935,6937,6954],{"className":6936},[278],[275,6938,6940],{"className":6939},[282],[284,6941,6942],{"xmlns":286},[288,6943,6944,6952],{},[291,6945,6946,6948,6950],{},[294,6947,4914],{},[298,6949,1847],{},[294,6951,4914],{},[418,6953,5101],{"encoding":420},[275,6955,6957,6975],{"className":6956,"ariaHidden":426},[425],[275,6958,6960,6963,6966,6969,6972],{"className":6959},[430],[275,6961],{"className":6962,"style":5111},[434],[275,6964,4914],{"className":6965,"style":4930},[447,448],[275,6967],{"className":6968,"style":1166},[457],[275,6970,1847],{"className":6971},[527],[275,6973],{"className":6974,"style":1166},[457],[275,6976,6978,6981],{"className":6977},[430],[275,6979],{"className":6980,"style":4926},[434],[275,6982,4914],{"className":6983,"style":4930},[447,448]," 相似度矩阵；",[28,6986,6987],{},"对角线是「正确配对」（图 1 ↔ 文 1），其余是负样本；",[28,6989,6990],{},"按 3.2 节的 InfoNCE 损失反向传播，拉近对角线、推远非对角线。",[16,6992,6993,6994,6997,6998,7001],{},"训练完成后，CLIP 天然获得",[20,6995,6996],{},"零样本分类","能力：把候选类别写成句子（",[130,6999,7000],{},"a photo of a dog","），与图片向量算相似度，最高者即预测类别。",[261,7003,7005],{"id":7004},"_44-推理一句话变向量","4.4 推理：一句话变向量",[16,7007,7008],{},"搜索时只做两件事：",[6901,7010,7011,7014],{},[28,7012,7013],{},"把用户输入的一句话（如「夕阳下的沙滩」）过文本编码器，得到一个文本向量；",[28,7015,7016,7017,7020],{},"用这个向量和库里所有图片向量算",[20,7018,7019],{},"余弦相似度","（3.1 节公式），按分数从高到低排序，取 top-k 返回。",[16,7022,7023,7024,7027,7028,7031],{},"关键点：",[20,7025,7026],{},"CLIP 匹配的是「语义」而不是「关键词」","。图片里没有「夕阳」这个字的标签，但只要画面语义接近，向量距离就近。Immich 官方 FAQ 也明确说明：",[20,7029,7030],{},"系统不会生成任何 tags、labels 或 descriptions","，搜索完全靠向量相似度。",[261,7033,7035],{"id":7034},"_45-三家用的-clip-模型","4.5 三家用的 CLIP 模型",[45,7037,7038,7051],{},[48,7039,7040],{},[51,7041,7042,7045,7048],{},[54,7043,7044],{},"产品",[54,7046,7047],{},"默认语义模型",[54,7049,7050],{},"特点",[64,7052,7053,7064,7075],{},[51,7054,7055,7058,7061],{},[69,7056,7057],{},"Immich",[69,7059,7060],{},"CLIP ViT-B-32（可切换其他 CLIP 变体）",[69,7062,7063],{},"开源、社区模型多，官方提供切换列表",[51,7065,7066,7069,7072],{},[69,7067,7068],{},"MT Photos",[69,7070,7071],{},"XLM-Roberta-Base-ViT-B-32（LAION-5B 训练）",[69,7073,7074],{},"多语言文本编码器，中文理解更好；官方说明该模型「解决了不认识颜色的问题」",[51,7076,7077,7080,7083],{},[69,7078,7079],{},"飞牛相册",[69,7081,7082],{},"智能识别模型（基础 \u002F 增强两档）",[69,7084,7085],{},"按硬件推荐，增强模型理解更精准、更占资源",[7087,7088,7089],"blockquote",{},[16,7090,7091],{},"中文用户选模型时要注意：CLIP 的文本编码器决定它「懂不懂中文」。用英文训练集的原始 ViT-B-32 搜中文，效果会明显打折；MT Photos 之所以换多语言模型，就是为了修这个问题。",[11,7093,7095],{"id":7094},"_5-向量检索从全库遍历到最近邻","5 向量检索：从「全库遍历」到「最近邻」",[16,7097,7098,7099],{},"向量算出来了，接下来是检索问题：",[20,7100,7101],{},"几十万张照片，怎么快速找出与查询向量最接近的一批？",[261,7103,7105],{"id":7104},"_51-存哪怎么查","5.1 存哪、怎么查",[16,7107,7108],{},"最简单的方式是全库暴力遍历 ——512 维向量的余弦计算非常快，十几万条也只是毫秒级，小相册完全够用。规模再大，就需要专门的向量存储：",[25,7110,7111,7117,7123],{},[28,7112,7113,7116],{},[20,7114,7115],{},"pgvector","：PostgreSQL 的向量扩展，把 embedding 当普通列存，SQL 里直接做最近邻查询。Immich 早期版本用它；",[28,7118,7119,7122],{},[20,7120,7121],{},"VectorChord","：pgvector 的磁盘优化重写版（解决向量膨胀和写入放大）。Immich 新版文档明确说明语义搜索由 VectorChord 驱动；",[28,7124,7125,7126,7129],{},"更大规模还可以上 ",[20,7127,7128],{},"HNSW \u002F IVF"," 这类近似最近邻索引，用一点精度换数量级速度。",[16,7131,7132,7133,7163,7164,7193],{},"数学上，最近邻问题就是：给定查询向量 ",[275,7134,7136,7150],{"className":7135},[278],[275,7137,7139],{"className":7138},[282],[284,7140,7141],{"xmlns":286},[288,7142,7143,7148],{},[291,7144,7145],{},[294,7146,7147],{},"q",[418,7149,7147],{"encoding":420},[275,7151,7153],{"className":7152,"ariaHidden":426},[425],[275,7154,7156,7160],{"className":7155},[430],[275,7157],{"className":7158,"style":7159},[434],"height:0.625em;vertical-align:-0.1944em;",[275,7161,7147],{"className":7162,"style":6743},[447,448],"，在集合 ",[275,7165,7167,7181],{"className":7166},[278],[275,7168,7170],{"className":7169},[282],[284,7171,7172],{"xmlns":286},[288,7173,7174,7179],{},[291,7175,7176],{},[294,7177,7178],{},"D",[418,7180,7178],{"encoding":420},[275,7182,7184],{"className":7183,"ariaHidden":426},[425],[275,7185,7187,7190],{"className":7186},[430],[275,7188],{"className":7189,"style":4926},[434],[275,7191,7178],{"className":7192,"style":449},[447,448]," 里找",[16,7195,7196],{},[275,7197,7199,7299],{"className":7198},[278],[275,7200,7202],{"className":7201},[282],[284,7203,7204],{"xmlns":286},[288,7205,7206,7296],{},[291,7207,7208,7211,7213,7231,7233,7235,7237,7239,7241,7243,7245,7247,7250,7252,7254,7256,7273,7276,7278,7280,7282,7284,7286,7288,7290,7292,7294],{},[294,7209,7210],{},"arg",[298,7212,300],{},[353,7214,7215,7222],{},[291,7216,7217,7220],{},[294,7218,7219],{},"max",[298,7221,300],{},[291,7223,7224,7226,7229],{},[294,7225,5707],{},[298,7227,7228],{},"∈",[294,7230,7178],{},[294,7232,296],{},[298,7234,300],{},[298,7236,304],{"stretchy":303},[294,7238,7147],{},[298,7240,1589],{"separator":426},[294,7242,5707],{},[298,7244,310],{"stretchy":303},[457,7246],{"width":1676},[298,7248,7249],{},"⟺",[457,7251],{"width":1676},[294,7253,7210],{},[298,7255,300],{},[353,7257,7258,7265],{},[291,7259,7260,7263],{},[294,7261,7262],{},"min",[298,7264,300],{},[291,7266,7267,7269,7271],{},[294,7268,5707],{},[298,7270,7228],{},[294,7272,7178],{},[298,7274,304],{"fence":303,"stretchy":426,"minsize":7275,"maxsize":7275},"1.2em",[394,7277,1586],{},[298,7279,1583],{},[294,7281,296],{},[298,7283,300],{},[298,7285,304],{"stretchy":303},[294,7287,7147],{},[298,7289,1589],{"separator":426},[294,7291,5707],{},[298,7293,310],{"stretchy":303},[298,7295,310],{"fence":303,"stretchy":426,"minsize":7275,"maxsize":7275},[418,7297,7298],{"encoding":420},"\\arg\\max_{x \\in D} \\cos(q, x)\n\\qquad \\Longleftrightarrow \\qquad\n\\arg\\min_{x \\in D} \\big( 1 - \\cos(q, x) \\big)",[275,7300,7302,7408,7493],{"className":7301,"ariaHidden":426},[425],[275,7303,7305,7308,7314,7317,7369,7372,7375,7378,7381,7384,7387,7390,7393,7396,7399,7402,7405],{"className":7304},[430],[275,7306],{"className":7307,"style":435},[434],[275,7309,7311,7312],{"className":7310},[439],"ar",[275,7313,5605],{"style":5604},[275,7315],{"className":7316,"style":1246},[457],[275,7318,7320,7323],{"className":7319},[439],[275,7321,7219],{"className":7322},[439],[275,7324,7326],{"className":7325},[672],[275,7327,7329,7360],{"className":7328},[486,487],[275,7330,7332,7357],{"className":7331},[491],[275,7333,7336],{"className":7334,"style":7335},[495],"height:0.3283em;",[275,7337,7339,7342],{"style":7338},"top:-2.55em;margin-right:0.05em;",[275,7340],{"className":7341,"style":1224},[503],[275,7343,7345],{"className":7344},[508,509,510,511],[275,7346,7348,7351,7354],{"className":7347},[447,511],[275,7349,5707],{"className":7350},[447,448,511],[275,7352,7228],{"className":7353},[462,511],[275,7355,7178],{"className":7356,"style":449},[447,448,511],[275,7358,573],{"className":7359},[572],[275,7361,7363],{"className":7362},[491],[275,7364,7367],{"className":7365,"style":7366},[495],"height:0.1774em;",[275,7368],{},[275,7370],{"className":7371,"style":1246},[457],[275,7373,296],{"className":7374},[439],[275,7376,304],{"className":7377},[443],[275,7379,7147],{"className":7380,"style":6743},[447,448],[275,7382,1589],{"className":7383},[1619],[275,7385],{"className":7386,"style":1246},[457],[275,7388,5707],{"className":7389},[447,448],[275,7391,310],{"className":7392},[453],[275,7394],{"className":7395,"style":1769},[457],[275,7397],{"className":7398,"style":458},[457],[275,7400,7249],{"className":7401},[462],[275,7403],{"className":7404,"style":1769},[457],[275,7406],{"className":7407,"style":458},[457],[275,7409,7411,7415,7420,7423,7472,7475,7481,7484,7487,7490],{"className":7410},[430],[275,7412],{"className":7413,"style":7414},[434],"height:1.2em;vertical-align:-0.35em;",[275,7416,7311,7418],{"className":7417},[439],[275,7419,5605],{"style":5604},[275,7421],{"className":7422,"style":1246},[457],[275,7424,7426,7429],{"className":7425},[439],[275,7427,7262],{"className":7428},[439],[275,7430,7432],{"className":7431},[672],[275,7433,7435,7464],{"className":7434},[486,487],[275,7436,7438,7461],{"className":7437},[491],[275,7439,7441],{"className":7440,"style":7335},[495],[275,7442,7443,7446],{"style":7338},[275,7444],{"className":7445,"style":1224},[503],[275,7447,7449],{"className":7448},[508,509,510,511],[275,7450,7452,7455,7458],{"className":7451},[447,511],[275,7453,5707],{"className":7454},[447,448,511],[275,7456,7228],{"className":7457},[462,511],[275,7459,7178],{"className":7460,"style":449},[447,448,511],[275,7462,573],{"className":7463},[572],[275,7465,7467],{"className":7466},[491],[275,7468,7470],{"className":7469,"style":7366},[495],[275,7471],{},[275,7473],{"className":7474,"style":1246},[457],[275,7476,7478],{"className":7477},[447],[275,7479,304],{"className":7480},[5621,694],[275,7482,1586],{"className":7483},[447],[275,7485],{"className":7486,"style":1166},[457],[275,7488,1583],{"className":7489},[527],[275,7491],{"className":7492,"style":1166},[457],[275,7494,7496,7499,7502,7505,7508,7511,7514,7517,7520],{"className":7495},[430],[275,7497],{"className":7498,"style":7414},[434],[275,7500,296],{"className":7501},[439],[275,7503,304],{"className":7504},[443],[275,7506,7147],{"className":7507,"style":6743},[447,448],[275,7509,1589],{"className":7510},[1619],[275,7512],{"className":7513,"style":1246},[457],[275,7515,5707],{"className":7516},[447,448],[275,7518,310],{"className":7519},[453],[275,7521,7523],{"className":7522},[447],[275,7524,310],{"className":7525},[5621,694],[16,7527,7528,7529,7620],{},"距离和相似度只是互为 1 的补：",[275,7530,7532,7563],{"className":7531},[278],[275,7533,7535],{"className":7534},[282],[284,7536,7537],{"xmlns":286},[288,7538,7539,7560],{},[291,7540,7541,7544,7546,7548,7550,7552,7554,7556,7558],{},[294,7542,7543],{},"d",[298,7545,313],{},[394,7547,1586],{},[298,7549,1583],{},[294,7551,296],{},[298,7553,300],{},[298,7555,304],{"stretchy":303},[294,7557,307],{},[298,7559,310],{"stretchy":303},[418,7561,7562],{"encoding":420},"d = 1 - \\cos(\\theta)",[275,7564,7566,7584,7602],{"className":7565,"ariaHidden":426},[425],[275,7567,7569,7572,7575,7578,7581],{"className":7568},[430],[275,7570],{"className":7571,"style":1179},[434],[275,7573,7543],{"className":7574},[447,448],[275,7576],{"className":7577,"style":458},[457],[275,7579,313],{"className":7580},[462],[275,7582],{"className":7583,"style":458},[457],[275,7585,7587,7590,7593,7596,7599],{"className":7586},[430],[275,7588],{"className":7589,"style":1935},[434],[275,7591,1586],{"className":7592},[447],[275,7594],{"className":7595,"style":1166},[457],[275,7597,1583],{"className":7598},[527],[275,7600],{"className":7601,"style":1166},[457],[275,7603,7605,7608,7611,7614,7617],{"className":7604},[430],[275,7606],{"className":7607,"style":435},[434],[275,7609,296],{"className":7610},[439],[275,7612,304],{"className":7613},[443],[275,7615,307],{"className":7616,"style":449},[447,448],[275,7618,310],{"className":7619},[453],"。距离越小越像，这个换算在后面飞牛阈值那里还会用到。",[261,7622,7624],{"id":7623},"_52-一行-sql-的事","5.2 一行 SQL 的事",[16,7626,7627],{},"pgvector 风格的真实查询长这样：",[123,7629,7632],{"className":7630,"code":7631,"language":128},[126],"-- \u003C=> 是余弦距离算子，按距离升序取最近的 100 个\nSELECT asset_id\nFROM asset_embedding\nORDER BY embedding \u003C=> $1\nLIMIT 100;\n",[130,7633,7631],{"__ignoreMap":132},[16,7635,7636,7637,7640],{},"对用户来说这是「一句话搜图」；对系统来说，这就是",[20,7638,7639],{},"一次向量距离排序","。整个搜索过程没有碰任何图片文件。",[11,7642,7644],{"id":7643},"_6-人脸识别检测对齐特征聚类","6 人脸识别：检测、对齐、特征、聚类",[16,7646,7647],{},"「人物相册」和「对比两张图是不是同一个人」是同一套流水线的两个阶段，完整链路是：",[123,7649,7652],{"className":7650,"code":7651,"language":128},[126],"图片 ─► 人脸检测(找脸+关键点) ─► 对齐(摆正) ─► 特征提取(512维向量)\n                                                      │\n                                                      ├─ 两张图：算余弦相似度 → 阈值判断「是不是同一人」\n                                                      └─ 全库：聚类 → 生成人物相册\n",[130,7653,7651],{"__ignoreMap":132},[261,7655,7657],{"id":7656},"_61-检测先找到脸在哪","6.1 检测：先找到脸在哪",[16,7659,7660],{},"第一步从图片里找出人脸框（bounding box）和 5 个关键点（两眼、鼻尖、两口角），并给出置信度。",[16,7662,7663,7664,7667,7668,7671],{},"Immich 和 MT Photos 都用 ",[20,7665,7666],{},"insightface"," 家族的 ",[20,7669,7670],{},"buffalo_l"," 模型包：检测器是 SCRFD（RetinaFace 一脉的轻量高效检测器），在 CPU 上也能跑得动。飞牛官方把它称为「人脸识别 - 标准模型」。",[16,7673,7674,7675,7678],{},"这一步还负责过滤：检测置信度低于阈值就当作「没有人脸」，直接跳过。飞牛的人脸设置里那个 ",[20,7676,7677],{},"置信度阈值（默认 0.65）"," 管的就是这个环节。",[261,7680,7682],{"id":7681},"_62-对齐把脸摆正几何变换","6.2 对齐：把脸摆正（几何变换）",[16,7684,7685,7686,7689],{},"侧脸、低头、仰角都会让特征提取质量下降。用检测出的 5 个关键点做一次几何变换，把眼睛、鼻子、嘴巴「转」到标准位置，再裁出人脸区域。",[20,7687,7688],{},"对齐是特征稳定的前提","，跳过这一步，同一张脸在不同角度下特征会漂移。",[16,7691,7692,7693,7696],{},"数学上是标准的",[20,7694,7695],{},"相似变换","（旋转 + 等比缩放 + 平移，保形不变），矩阵形式：",[16,7698,7699],{},[275,7700,7702,7913],{"className":7701},[278],[275,7703,7705],{"className":7704},[282],[284,7706,7707],{"xmlns":286},[288,7708,7709,7910],{},[291,7710,7711,7762,7764,7878],{},[291,7712,7713,7715,7760],{},[298,7714,1580],{"fence":426},[7716,7717,7721,7739,7752],"mtable",{"rowspacing":7718,"columnalign":7719,"columnspacing":7720},"0.16em","center","1em",[7722,7723,7724],"mtr",{},[7725,7726,7727],"mtd",{},[7728,7729,7731],"mstyle",{"scriptlevel":7730,"displaystyle":303},"0",[2129,7732,7733,7735],{},[294,7734,5707],{},[298,7736,7738],{"mathvariant":332,"lspace":7737,"rspace":7737},"0em","′",[7722,7740,7741],{},[7725,7742,7743],{},[7728,7744,7745],{"scriptlevel":7730,"displaystyle":303},[2129,7746,7747,7750],{},[294,7748,7749],{},"y",[298,7751,7738],{"mathvariant":332,"lspace":7737,"rspace":7737},[7722,7753,7754],{},[7725,7755,7756],{},[7728,7757,7758],{"scriptlevel":7730,"displaystyle":303},[394,7759,1586],{},[298,7761,1594],{"fence":426},[298,7763,313],{},[291,7765,7766,7768,7876],{},[298,7767,1580],{"fence":426},[7716,7769,7771,7816,7856],{"rowspacing":7718,"columnalign":7770,"columnspacing":7720},"center center center",[7722,7772,7773,7788,7805],{},[7725,7774,7775],{},[7728,7776,7777],{"scriptlevel":7730,"displaystyle":303},[291,7778,7779,7781,7783,7785],{},[294,7780,5152],{},[294,7782,296],{},[298,7784,300],{},[294,7786,7787],{},"α",[7725,7789,7790],{},[7728,7791,7792],{"scriptlevel":7730,"displaystyle":303},[291,7793,7794,7796,7798,7801,7803],{},[298,7795,1583],{},[294,7797,5152],{},[294,7799,7800],{},"sin",[298,7802,300],{},[294,7804,7787],{},[7725,7806,7807],{},[7728,7808,7809],{"scriptlevel":7730,"displaystyle":303},[353,7810,7811,7814],{},[294,7812,7813],{},"t",[294,7815,5707],{},[7722,7817,7818,7832,7846],{},[7725,7819,7820],{},[7728,7821,7822],{"scriptlevel":7730,"displaystyle":303},[291,7823,7824,7826,7828,7830],{},[294,7825,5152],{},[294,7827,7800],{},[298,7829,300],{},[294,7831,7787],{},[7725,7833,7834],{},[7728,7835,7836],{"scriptlevel":7730,"displaystyle":303},[291,7837,7838,7840,7842,7844],{},[294,7839,5152],{},[294,7841,296],{},[298,7843,300],{},[294,7845,7787],{},[7725,7847,7848],{},[7728,7849,7850],{"scriptlevel":7730,"displaystyle":303},[353,7851,7852,7854],{},[294,7853,7813],{},[294,7855,7749],{},[7722,7857,7858,7864,7870],{},[7725,7859,7860],{},[7728,7861,7862],{"scriptlevel":7730,"displaystyle":303},[394,7863,7730],{},[7725,7865,7866],{},[7728,7867,7868],{"scriptlevel":7730,"displaystyle":303},[394,7869,7730],{},[7725,7871,7872],{},[7728,7873,7874],{"scriptlevel":7730,"displaystyle":303},[394,7875,1586],{},[298,7877,1594],{"fence":426},[291,7879,7880,7882,7908],{},[298,7881,1580],{"fence":426},[7716,7883,7884,7892,7900],{"rowspacing":7718,"columnalign":7719,"columnspacing":7720},[7722,7885,7886],{},[7725,7887,7888],{},[7728,7889,7890],{"scriptlevel":7730,"displaystyle":303},[294,7891,5707],{},[7722,7893,7894],{},[7725,7895,7896],{},[7728,7897,7898],{"scriptlevel":7730,"displaystyle":303},[294,7899,7749],{},[7722,7901,7902],{},[7725,7903,7904],{},[7728,7905,7906],{"scriptlevel":7730,"displaystyle":303},[394,7907,1586],{},[298,7909,1594],{"fence":426},[418,7911,7912],{"encoding":420},"\\begin{bmatrix} x' \\\\ y' \\\\ 1 \\end{bmatrix} =\n\\begin{bmatrix} s\\cos\\alpha & -s\\sin\\alpha & t_x \\\\ s\\sin\\alpha & s\\cos\\alpha & t_y \\\\ 0 & 0 & 1 \\end{bmatrix}\n\\begin{bmatrix} x \\\\ y \\\\ 1 \\end{bmatrix}",[275,7914,7916,8146],{"className":7915,"ariaHidden":426},[425],[275,7917,7919,7923,8137,8140,8143],{"className":7918},[430],[275,7920],{"className":7921,"style":7922},[434],"height:3.6em;vertical-align:-1.55em;",[275,7924,7926,7973,8099],{"className":7925},[5612],[275,7927,7929],{"className":7928},[443],[275,7930,7933],{"className":7931},[5621,7932],"mult",[275,7934,7936,7964],{"className":7935},[486,487],[275,7937,7939,7961],{"className":7938},[491],[275,7940,7943],{"className":7941,"style":7942},[495],"height:2.05em;",[275,7944,7946,7950],{"style":7945},"top:-4.05em;",[275,7947],{"className":7948,"style":7949},[503],"height:5.6em;",[275,7951,7953],{"style":7952},"width:0.667em;height:3.6em;",[781,7954,7958],{"xmlns":783,"width":7955,"height":7956,"viewBox":7957},"0.667em","3.6em","0 0 667 3600",[789,7959],{"d":7960},"M403 1759 V84 H666 V0 H319 V1759 v0 v1759 v84 h347 v-84\nH403z M403 1759 V0 H319 V1759 v0 v1759 v84 h84z",[275,7962,573],{"className":7963},[572],[275,7965,7967],{"className":7966},[491],[275,7968,7971],{"className":7969,"style":7970},[495],"height:1.55em;",[275,7972],{},[275,7974,7976],{"className":7975},[447],[275,7977,7979],{"className":7978},[7716],[275,7980,7983],{"className":7981},[7982],"col-align-c",[275,7984,7986,8091],{"className":7985},[486,487],[275,7987,7989,8088],{"className":7988},[491],[275,7990,7992,8035,8076],{"className":7991,"style":7942},[495],[275,7993,7995,7998],{"style":7994},"top:-4.21em;",[275,7996],{"className":7997,"style":504},[503],[275,7999,8001],{"className":8000},[447],[275,8002,8004,8007],{"className":8003},[447],[275,8005,5707],{"className":8006},[447,448],[275,8008,8010],{"className":8009},[672],[275,8011,8013],{"className":8012},[486],[275,8014,8016],{"className":8015},[491],[275,8017,8020],{"className":8018,"style":8019},[495],"height:0.7519em;",[275,8021,8023,8026],{"style":8022},"top:-3.063em;margin-right:0.05em;",[275,8024],{"className":8025,"style":1224},[503],[275,8027,8029],{"className":8028},[508,509,510,511],[275,8030,8032],{"className":8031},[447,511],[275,8033,7738],{"className":8034},[447,511],[275,8036,8038,8041],{"style":8037},"top:-3.01em;",[275,8039],{"className":8040,"style":504},[503],[275,8042,8044],{"className":8043},[447],[275,8045,8047,8050],{"className":8046},[447],[275,8048,7749],{"className":8049,"style":6743},[447,448],[275,8051,8053],{"className":8052},[672],[275,8054,8056],{"className":8055},[486],[275,8057,8059],{"className":8058},[491],[275,8060,8062],{"className":8061,"style":8019},[495],[275,8063,8064,8067],{"style":8022},[275,8065],{"className":8066,"style":1224},[503],[275,8068,8070],{"className":8069},[508,509,510,511],[275,8071,8073],{"className":8072},[447,511],[275,8074,7738],{"className":8075},[447,511],[275,8077,8079,8082],{"style":8078},"top:-1.81em;",[275,8080],{"className":8081,"style":504},[503],[275,8083,8085],{"className":8084},[447],[275,8086,1586],{"className":8087},[447],[275,8089,573],{"className":8090},[572],[275,8092,8094],{"className":8093},[491],[275,8095,8097],{"className":8096,"style":7970},[495],[275,8098],{},[275,8100,8102],{"className":8101},[453],[275,8103,8105],{"className":8104},[5621,7932],[275,8106,8108,8129],{"className":8107},[486,487],[275,8109,8111,8126],{"className":8110},[491],[275,8112,8114],{"className":8113,"style":7942},[495],[275,8115,8116,8119],{"style":7945},[275,8117],{"className":8118,"style":7949},[503],[275,8120,8121],{"style":7952},[781,8122,8123],{"xmlns":783,"width":7955,"height":7956,"viewBox":7957},[789,8124],{"d":8125},"M347 1759 V0 H0 V84 H263 V1759 v0 v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v0 v1759 h84z",[275,8127,573],{"className":8128},[572],[275,8130,8132],{"className":8131},[491],[275,8133,8135],{"className":8134,"style":7970},[495],[275,8136],{},[275,8138],{"className":8139,"style":458},[457],[275,8141,313],{"className":8142},[462],[275,8144],{"className":8145,"style":458},[457],[275,8147,8149,8152,8544,8547],{"className":8148},[430],[275,8150],{"className":8151,"style":7922},[434],[275,8153,8155,8192,8507],{"className":8154},[5612],[275,8156,8158],{"className":8157},[443],[275,8159,8161],{"className":8160},[5621,7932],[275,8162,8164,8184],{"className":8163},[486,487],[275,8165,8167,8181],{"className":8166},[491],[275,8168,8170],{"className":8169,"style":7942},[495],[275,8171,8172,8175],{"style":7945},[275,8173],{"className":8174,"style":7949},[503],[275,8176,8177],{"style":7952},[781,8178,8179],{"xmlns":783,"width":7955,"height":7956,"viewBox":7957},[789,8180],{"d":7960},[275,8182,573],{"className":8183},[572],[275,8185,8187],{"className":8186},[491],[275,8188,8190],{"className":8189,"style":7970},[495],[275,8191],{},[275,8193,8195],{"className":8194},[447],[275,8196,8198,8279,8284,8287,8370,8373,8376],{"className":8197},[7716],[275,8199,8201],{"className":8200},[7982],[275,8202,8204,8271],{"className":8203},[486,487],[275,8205,8207,8268],{"className":8206},[491],[275,8208,8210,8234,8257],{"className":8209,"style":7942},[495],[275,8211,8212,8215],{"style":7994},[275,8213],{"className":8214,"style":504},[503],[275,8216,8218,8221,8224,8227,8230],{"className":8217},[447],[275,8219,5152],{"className":8220},[447,448],[275,8222],{"className":8223,"style":1246},[457],[275,8225,296],{"className":8226},[439],[275,8228],{"className":8229,"style":1246},[457],[275,8231,7787],{"className":8232,"style":8233},[447,448],"margin-right:0.0037em;",[275,8235,8236,8239],{"style":8037},[275,8237],{"className":8238,"style":504},[503],[275,8240,8242,8245,8248,8251,8254],{"className":8241},[447],[275,8243,5152],{"className":8244},[447,448],[275,8246],{"className":8247,"style":1246},[457],[275,8249,7800],{"className":8250},[439],[275,8252],{"className":8253,"style":1246},[457],[275,8255,7787],{"className":8256,"style":8233},[447,448],[275,8258,8259,8262],{"style":8078},[275,8260],{"className":8261,"style":504},[503],[275,8263,8265],{"className":8264},[447],[275,8266,7730],{"className":8267},[447],[275,8269,573],{"className":8270},[572],[275,8272,8274],{"className":8273},[491],[275,8275,8277],{"className":8276,"style":7970},[495],[275,8278],{},[275,8280],{"className":8281,"style":8283},[8282],"arraycolsep","width:0.5em;",[275,8285],{"className":8286,"style":8283},[8282],[275,8288,8290],{"className":8289},[7982],[275,8291,8293,8362],{"className":8292},[486,487],[275,8294,8296,8359],{"className":8295},[491],[275,8297,8299,8325,8348],{"className":8298,"style":7942},[495],[275,8300,8301,8304],{"style":7994},[275,8302],{"className":8303,"style":504},[503],[275,8305,8307,8310,8313,8316,8319,8322],{"className":8306},[447],[275,8308,1583],{"className":8309},[447],[275,8311,5152],{"className":8312},[447,448],[275,8314],{"className":8315,"style":1246},[457],[275,8317,7800],{"className":8318},[439],[275,8320],{"className":8321,"style":1246},[457],[275,8323,7787],{"className":8324,"style":8233},[447,448],[275,8326,8327,8330],{"style":8037},[275,8328],{"className":8329,"style":504},[503],[275,8331,8333,8336,8339,8342,8345],{"className":8332},[447],[275,8334,5152],{"className":8335},[447,448],[275,8337],{"className":8338,"style":1246},[457],[275,8340,296],{"className":8341},[439],[275,8343],{"className":8344,"style":1246},[457],[275,8346,7787],{"className":8347,"style":8233},[447,448],[275,8349,8350,8353],{"style":8078},[275,8351],{"className":8352,"style":504},[503],[275,8354,8356],{"className":8355},[447],[275,8357,7730],{"className":8358},[447],[275,8360,573],{"className":8361},[572],[275,8363,8365],{"className":8364},[491],[275,8366,8368],{"className":8367,"style":7970},[495],[275,8369],{},[275,8371],{"className":8372,"style":8283},[8282],[275,8374],{"className":8375,"style":8283},[8282],[275,8377,8379],{"className":8378},[7982],[275,8380,8382,8499],{"className":8381},[486,487],[275,8383,8385,8496],{"className":8384},[491],[275,8386,8388,8437,8485],{"className":8387,"style":7942},[495],[275,8389,8390,8393],{"style":7994},[275,8391],{"className":8392,"style":504},[503],[275,8394,8396],{"className":8395},[447],[275,8397,8399,8402],{"className":8398},[447],[275,8400,7813],{"className":8401},[447,448],[275,8403,8405],{"className":8404},[672],[275,8406,8408,8429],{"className":8407},[486,487],[275,8409,8411,8426],{"className":8410},[491],[275,8412,8415],{"className":8413,"style":8414},[495],"height:0.1514em;",[275,8416,8417,8420],{"style":1268},[275,8418],{"className":8419,"style":1224},[503],[275,8421,8423],{"className":8422},[508,509,510,511],[275,8424,5707],{"className":8425},[447,448,511],[275,8427,573],{"className":8428},[572],[275,8430,8432],{"className":8431},[491],[275,8433,8435],{"className":8434,"style":1287},[495],[275,8436],{},[275,8438,8439,8442],{"style":8037},[275,8440],{"className":8441,"style":504},[503],[275,8443,8445],{"className":8444},[447],[275,8446,8448,8451],{"className":8447},[447],[275,8449,7813],{"className":8450},[447,448],[275,8452,8454],{"className":8453},[672],[275,8455,8457,8477],{"className":8456},[486,487],[275,8458,8460,8474],{"className":8459},[491],[275,8461,8463],{"className":8462,"style":8414},[495],[275,8464,8465,8468],{"style":1268},[275,8466],{"className":8467,"style":1224},[503],[275,8469,8471],{"className":8470},[508,509,510,511],[275,8472,7749],{"className":8473,"style":6743},[447,448,511],[275,8475,573],{"className":8476},[572],[275,8478,8480],{"className":8479},[491],[275,8481,8483],{"className":8482,"style":5247},[495],[275,8484],{},[275,8486,8487,8490],{"style":8078},[275,8488],{"className":8489,"style":504},[503],[275,8491,8493],{"className":8492},[447],[275,8494,1586],{"className":8495},[447],[275,8497,573],{"className":8498},[572],[275,8500,8502],{"className":8501},[491],[275,8503,8505],{"className":8504,"style":7970},[495],[275,8506],{},[275,8508,8510],{"className":8509},[453],[275,8511,8513],{"className":8512},[5621,7932],[275,8514,8516,8536],{"className":8515},[486,487],[275,8517,8519,8533],{"className":8518},[491],[275,8520,8522],{"className":8521,"style":7942},[495],[275,8523,8524,8527],{"style":7945},[275,8525],{"className":8526,"style":7949},[503],[275,8528,8529],{"style":7952},[781,8530,8531],{"xmlns":783,"width":7955,"height":7956,"viewBox":7957},[789,8532],{"d":8125},[275,8534,573],{"className":8535},[572],[275,8537,8539],{"className":8538},[491],[275,8540,8542],{"className":8541,"style":7970},[495],[275,8543],{},[275,8545],{"className":8546,"style":1246},[457],[275,8548,8550,8587,8649],{"className":8549},[5612],[275,8551,8553],{"className":8552},[443],[275,8554,8556],{"className":8555},[5621,7932],[275,8557,8559,8579],{"className":8558},[486,487],[275,8560,8562,8576],{"className":8561},[491],[275,8563,8565],{"className":8564,"style":7942},[495],[275,8566,8567,8570],{"style":7945},[275,8568],{"className":8569,"style":7949},[503],[275,8571,8572],{"style":7952},[781,8573,8574],{"xmlns":783,"width":7955,"height":7956,"viewBox":7957},[789,8575],{"d":7960},[275,8577,573],{"className":8578},[572],[275,8580,8582],{"className":8581},[491],[275,8583,8585],{"className":8584,"style":7970},[495],[275,8586],{},[275,8588,8590],{"className":8589},[447],[275,8591,8593],{"className":8592},[7716],[275,8594,8596],{"className":8595},[7982],[275,8597,8599,8641],{"className":8598},[486,487],[275,8600,8602,8638],{"className":8601},[491],[275,8603,8605,8616,8627],{"className":8604,"style":7942},[495],[275,8606,8607,8610],{"style":7994},[275,8608],{"className":8609,"style":504},[503],[275,8611,8613],{"className":8612},[447],[275,8614,5707],{"className":8615},[447,448],[275,8617,8618,8621],{"style":8037},[275,8619],{"className":8620,"style":504},[503],[275,8622,8624],{"className":8623},[447],[275,8625,7749],{"className":8626,"style":6743},[447,448],[275,8628,8629,8632],{"style":8078},[275,8630],{"className":8631,"style":504},[503],[275,8633,8635],{"className":8634},[447],[275,8636,1586],{"className":8637},[447],[275,8639,573],{"className":8640},[572],[275,8642,8644],{"className":8643},[491],[275,8645,8647],{"className":8646,"style":7970},[495],[275,8648],{},[275,8650,8652],{"className":8651},[453],[275,8653,8655],{"className":8654},[5621,7932],[275,8656,8658,8678],{"className":8657},[486,487],[275,8659,8661,8675],{"className":8660},[491],[275,8662,8664],{"className":8663,"style":7942},[495],[275,8665,8666,8669],{"style":7945},[275,8667],{"className":8668,"style":7949},[503],[275,8670,8671],{"style":7952},[781,8672,8673],{"xmlns":783,"width":7955,"height":7956,"viewBox":7957},[789,8674],{"d":8125},[275,8676,573],{"className":8677},[572],[275,8679,8681],{"className":8680},[491],[275,8682,8684],{"className":8683,"style":7970},[495],[275,8685],{},[16,8687,1108,8688,8716,8717,8746,8747,8870,8871,6827,8899,6827,8927,8956],{},[275,8689,8691,8704],{"className":8690},[278],[275,8692,8694],{"className":8693},[282],[284,8695,8696],{"xmlns":286},[288,8697,8698,8702],{},[291,8699,8700],{},[294,8701,5152],{},[418,8703,5152],{"encoding":420},[275,8705,8707],{"className":8706,"ariaHidden":426},[425],[275,8708,8710,8713],{"className":8709},[430],[275,8711],{"className":8712,"style":1714},[434],[275,8714,5152],{"className":8715},[447,448]," 是缩放、",[275,8718,8720,8734],{"className":8719},[278],[275,8721,8723],{"className":8722},[282],[284,8724,8725],{"xmlns":286},[288,8726,8727,8731],{},[291,8728,8729],{},[294,8730,7787],{},[418,8732,8733],{"encoding":420},"\\alpha",[275,8735,8737],{"className":8736,"ariaHidden":426},[425],[275,8738,8740,8743],{"className":8739},[430],[275,8741],{"className":8742,"style":1714},[434],[275,8744,7787],{"className":8745,"style":8233},[447,448]," 是旋转角、",[275,8748,8750,8777],{"className":8749},[278],[275,8751,8753],{"className":8752},[282],[284,8754,8755],{"xmlns":286},[288,8756,8757,8774],{},[291,8758,8759,8765,8768],{},[353,8760,8761,8763],{},[294,8762,7813],{},[294,8764,5707],{},[294,8766,8767],{"mathvariant":332},"\u002F",[353,8769,8770,8772],{},[294,8771,7813],{},[294,8773,7749],{},[418,8775,8776],{"encoding":420},"t_x\u002Ft_y",[275,8778,8780],{"className":8779,"ariaHidden":426},[425],[275,8781,8783,8787,8827,8830],{"className":8782},[430],[275,8784],{"className":8785,"style":8786},[434],"height:1.0361em;vertical-align:-0.2861em;",[275,8788,8790,8793],{"className":8789},[447],[275,8791,7813],{"className":8792},[447,448],[275,8794,8796],{"className":8795},[672],[275,8797,8799,8819],{"className":8798},[486,487],[275,8800,8802,8816],{"className":8801},[491],[275,8803,8805],{"className":8804,"style":8414},[495],[275,8806,8807,8810],{"style":1268},[275,8808],{"className":8809,"style":1224},[503],[275,8811,8813],{"className":8812},[508,509,510,511],[275,8814,5707],{"className":8815},[447,448,511],[275,8817,573],{"className":8818},[572],[275,8820,8822],{"className":8821},[491],[275,8823,8825],{"className":8824,"style":1287},[495],[275,8826],{},[275,8828,8767],{"className":8829},[447],[275,8831,8833,8836],{"className":8832},[447],[275,8834,7813],{"className":8835},[447,448],[275,8837,8839],{"className":8838},[672],[275,8840,8842,8862],{"className":8841},[486,487],[275,8843,8845,8859],{"className":8844},[491],[275,8846,8848],{"className":8847,"style":8414},[495],[275,8849,8850,8853],{"style":1268},[275,8851],{"className":8852,"style":1224},[503],[275,8854,8856],{"className":8855},[508,509,510,511],[275,8857,7749],{"className":8858,"style":6743},[447,448,511],[275,8860,573],{"className":8861},[572],[275,8863,8865],{"className":8864},[491],[275,8866,8868],{"className":8867,"style":5247},[495],[275,8869],{}," 是平移。用标准 5 点（左右眼、鼻尖、左右口角）和检测出的 5 点解这个方程，求出 ",[275,8872,8874,8887],{"className":8873},[278],[275,8875,8877],{"className":8876},[282],[284,8878,8879],{"xmlns":286},[288,8880,8881,8885],{},[291,8882,8883],{},[294,8884,5152],{},[418,8886,5152],{"encoding":420},[275,8888,8890],{"className":8889,"ariaHidden":426},[425],[275,8891,8893,8896],{"className":8892},[430],[275,8894],{"className":8895,"style":1714},[434],[275,8897,5152],{"className":8898},[447,448],[275,8900,8902,8915],{"className":8901},[278],[275,8903,8905],{"className":8904},[282],[284,8906,8907],{"xmlns":286},[288,8908,8909,8913],{},[291,8910,8911],{},[294,8912,7787],{},[418,8914,8733],{"encoding":420},[275,8916,8918],{"className":8917,"ariaHidden":426},[425],[275,8919,8921,8924],{"className":8920},[430],[275,8922],{"className":8923,"style":1714},[434],[275,8925,7787],{"className":8926,"style":8233},[447,448],[275,8928,8930,8943],{"className":8929},[278],[275,8931,8933],{"className":8932},[282],[284,8934,8935],{"xmlns":286},[288,8936,8937,8941],{},[291,8938,8939],{},[294,8940,7813],{},[418,8942,7813],{"encoding":420},[275,8944,8946],{"className":8945,"ariaHidden":426},[425],[275,8947,8949,8953],{"className":8948},[430],[275,8950],{"className":8951,"style":8952},[434],"height:0.6151em;",[275,8954,7813],{"className":8955},[447,448],"，把原图像素按矩阵映射到标准位置即可。insightface 内部做的就是这件事。",[261,8958,8960],{"id":8959},"_63-特征512-维人脸指纹","6.3 特征：512 维人脸指纹",[16,8962,8963,8964,8967],{},"对齐后的人脸图送入识别模型（buffalo_l 内是 ArcFace 系的 w600k_r50），输出一个 ",[20,8965,8966],{},"512 维的归一化向量","—— 相当于这张脸的「数字指纹」。同一个人不同照片的指纹相似，不同人差异大。",[16,8969,8970,8971,8974],{},"为什么是 512 维？这是经验与工程权衡的结果：",[20,8972,8973],{},"维度越高，容纳的区分信息越多，但存储、计算、过拟合风险也同步上升","。人脸领域在 128–1024 维之间都有人用，ArcFace 论文验证 512 维在精度和速度上平衡最好。",[16,8976,8977],{},"insightface 官方 API 的用法就是直白的「取向量、算点积」：",[123,8979,8982],{"className":8980,"code":8981,"language":128},[126],"from insightface.app import FaceAnalysis\nimport cv2\n\napp = FaceAnalysis(name=\"buffalo_l\")\n\na = app.get(cv2.imread(\"a.jpg\"))[0].normed_embedding   # 人脸A的512维向量\nb = app.get(cv2.imread(\"b.jpg\"))[0].normed_embedding   # 人脸B的512维向量\n\nscore = a @ b        # 归一化向量的点积 = 余弦相似度，0~1\nis_same = score > 0.5  # 超过阈值判定为同一人\n",[130,8983,8981],{"__ignoreMap":132},[261,8985,8987],{"id":8986},"_64-对比两张图是不是同一个人","6.4 对比：两张图是不是同一个人",[16,8989,8990],{},"这就是「对比人物图片」的原理，数学版本：",[7087,8992,8993,8998,9002,9007,9011],{},[16,8994,8995],{},[20,8996,8997],{},"提取两张脸各自的 512 维特征向量，按 3.1 节公式算余弦相似度 ",[16,8999,9000],{},[20,9001,6258],{},[16,9003,9004],{},[20,9005,9006],{},"超过阈值 ",[16,9008,9009],{},[20,9010,6258],{},[16,9012,9013],{},[20,9014,9015],{}," 就是同一个人。",[16,9017,9018],{},"阈值是召回与误判的平衡点：",[25,9020,9021,9024],{},[28,9022,9023],{},"阈值调低 → 更容易把不同的人判成同一人（漏放行）；",[28,9025,9026],{},"阈值调高 → 更严格，但同一个人可能被拆成多个相册。",[16,9028,9029,9030,9033,9034,9123],{},"这里有个容易混淆的点要拆开：",[20,9031,9032],{},"相似度阈值和距离阈值是互补的","。距离 ",[275,9035,9037,9066],{"className":9036},[278],[275,9038,9040],{"className":9039},[282],[284,9041,9042],{"xmlns":286},[288,9043,9044,9064],{},[291,9045,9046,9048,9050,9052,9054,9056,9058,9060,9062],{},[294,9047,7543],{},[298,9049,313],{},[394,9051,1586],{},[298,9053,1583],{},[294,9055,296],{},[298,9057,300],{},[298,9059,304],{"stretchy":303},[294,9061,307],{},[298,9063,310],{"stretchy":303},[418,9065,7562],{"encoding":420},[275,9067,9069,9087,9105],{"className":9068,"ariaHidden":426},[425],[275,9070,9072,9075,9078,9081,9084],{"className":9071},[430],[275,9073],{"className":9074,"style":1179},[434],[275,9076,7543],{"className":9077},[447,448],[275,9079],{"className":9080,"style":458},[457],[275,9082,313],{"className":9083},[462],[275,9085],{"className":9086,"style":458},[457],[275,9088,9090,9093,9096,9099,9102],{"className":9089},[430],[275,9091],{"className":9092,"style":1935},[434],[275,9094,1586],{"className":9095},[447],[275,9097],{"className":9098,"style":1166},[457],[275,9100,1583],{"className":9101},[527],[275,9103],{"className":9104,"style":1166},[457],[275,9106,9108,9111,9114,9117,9120],{"className":9107},[430],[275,9109],{"className":9110,"style":435},[434],[275,9112,296],{"className":9113},[439],[275,9115,304],{"className":9116},[443],[275,9118,307],{"className":9119,"style":449},[447,448],[275,9121,310],{"className":9122},[453],"，所以「差异阈值」和「相似度门槛」互为补数：",[16,9125,9126],{},[275,9127,9129,9159],{"className":9128},[278],[275,9130,9132],{"className":9131},[282],[284,9133,9134],{"xmlns":286},[288,9135,9136,9156],{},[291,9137,9138,9144,9146,9148,9150],{},[353,9139,9140,9142],{},[294,9141,5152],{},[1659,9143,54],{},[298,9145,313],{},[394,9147,1586],{},[298,9149,1583],{},[353,9151,9152,9154],{},[294,9153,7543],{},[1659,9155,54],{},[418,9157,9158],{"encoding":420},"s_{\\text{th}} = 1 - d_{\\text{th}}",[275,9160,9162,9225,9243],{"className":9161,"ariaHidden":426},[425],[275,9163,9165,9169,9216,9219,9222],{"className":9164},[430],[275,9166],{"className":9167,"style":9168},[434],"height:0.5806em;vertical-align:-0.15em;",[275,9170,9172,9175],{"className":9171},[447],[275,9173,5152],{"className":9174},[447,448],[275,9176,9178],{"className":9177},[672],[275,9179,9181,9208],{"className":9180},[486,487],[275,9182,9184,9205],{"className":9183},[491],[275,9185,9188],{"className":9186,"style":9187},[495],"height:0.3361em;",[275,9189,9190,9193],{"style":1268},[275,9191],{"className":9192,"style":1224},[503],[275,9194,9196],{"className":9195},[508,509,510,511],[275,9197,9199],{"className":9198},[447,511],[275,9200,9202],{"className":9201},[447,128,511],[275,9203,54],{"className":9204},[447,511],[275,9206,573],{"className":9207},[572],[275,9209,9211],{"className":9210},[491],[275,9212,9214],{"className":9213,"style":1287},[495],[275,9215],{},[275,9217],{"className":9218,"style":458},[457],[275,9220,313],{"className":9221},[462],[275,9223],{"className":9224,"style":458},[457],[275,9226,9228,9231,9234,9237,9240],{"className":9227},[430],[275,9229],{"className":9230,"style":1935},[434],[275,9232,1586],{"className":9233},[447],[275,9235],{"className":9236,"style":1166},[457],[275,9238,1583],{"className":9239},[527],[275,9241],{"className":9242,"style":1166},[457],[275,9244,9246,9250],{"className":9245},[430],[275,9247],{"className":9248,"style":9249},[434],"height:0.8444em;vertical-align:-0.15em;",[275,9251,9253,9256],{"className":9252},[447],[275,9254,7543],{"className":9255},[447,448],[275,9257,9259],{"className":9258},[672],[275,9260,9262,9288],{"className":9261},[486,487],[275,9263,9265,9285],{"className":9264},[491],[275,9266,9268],{"className":9267,"style":9187},[495],[275,9269,9270,9273],{"style":1268},[275,9271],{"className":9272,"style":1224},[503],[275,9274,9276],{"className":9275},[508,509,510,511],[275,9277,9279],{"className":9278},[447,511],[275,9280,9282],{"className":9281},[447,128,511],[275,9283,54],{"className":9284},[447,511],[275,9286,573],{"className":9287},[572],[275,9289,9291],{"className":9290},[491],[275,9292,9294],{"className":9293,"style":1287},[495],[275,9295],{},[16,9297,9298,9299,9328,9329,9418,9419,9328,9448,9492],{},"飞牛默认差异阈值 ",[275,9300,9302,9316],{"className":9301},[278],[275,9303,9305],{"className":9304},[282],[284,9306,9307],{"xmlns":286},[288,9308,9309,9314],{},[291,9310,9311],{},[394,9312,9313],{},"0.36",[418,9315,9313],{"encoding":420},[275,9317,9319],{"className":9318,"ariaHidden":426},[425],[275,9320,9322,9325],{"className":9321},[430],[275,9323],{"className":9324,"style":2026},[434],[275,9326,9313],{"className":9327},[447]," ⇒ 相似度门槛 ",[275,9330,9332,9357],{"className":9331},[278],[275,9333,9335],{"className":9334},[282],[284,9336,9337],{"xmlns":286},[288,9338,9339,9354],{},[291,9340,9341,9343,9345,9347,9349,9351],{},[298,9342,313],{},[394,9344,1586],{},[298,9346,1583],{},[394,9348,9313],{},[298,9350,313],{},[394,9352,9353],{},"0.64",[418,9355,9356],{"encoding":420},"= 1 - 0.36 = 0.64",[275,9358,9360,9373,9391,9409],{"className":9359,"ariaHidden":426},[425],[275,9361,9363,9367,9370],{"className":9362},[430],[275,9364],{"className":9365,"style":9366},[434],"height:0.3669em;",[275,9368,313],{"className":9369},[462],[275,9371],{"className":9372,"style":458},[457],[275,9374,9376,9379,9382,9385,9388],{"className":9375},[430],[275,9377],{"className":9378,"style":1935},[434],[275,9380,1586],{"className":9381},[447],[275,9383],{"className":9384,"style":1166},[457],[275,9386,1583],{"className":9387},[527],[275,9389],{"className":9390,"style":1166},[457],[275,9392,9394,9397,9400,9403,9406],{"className":9393},[430],[275,9395],{"className":9396,"style":2026},[434],[275,9398,9313],{"className":9399},[447],[275,9401],{"className":9402,"style":458},[457],[275,9404,313],{"className":9405},[462],[275,9407],{"className":9408,"style":458},[457],[275,9410,9412,9415],{"className":9411},[430],[275,9413],{"className":9414,"style":2026},[434],[275,9416,9353],{"className":9417},[447],"；差异阈值调到 ",[275,9420,9422,9436],{"className":9421},[278],[275,9423,9425],{"className":9424},[282],[284,9426,9427],{"xmlns":286},[288,9428,9429,9434],{},[291,9430,9431],{},[394,9432,9433],{},"0.20",[418,9435,9433],{"encoding":420},[275,9437,9439],{"className":9438,"ariaHidden":426},[425],[275,9440,9442,9445],{"className":9441},[430],[275,9443],{"className":9444,"style":2026},[434],[275,9446,9433],{"className":9447},[447],[275,9449,9451,9468],{"className":9450},[278],[275,9452,9454],{"className":9453},[282],[284,9455,9456],{"xmlns":286},[288,9457,9458,9465],{},[291,9459,9460,9462],{},[298,9461,313],{},[394,9463,9464],{},"0.80",[418,9466,9467],{"encoding":420},"= 0.80",[275,9469,9471,9483],{"className":9470,"ariaHidden":426},[425],[275,9472,9474,9477,9480],{"className":9473},[430],[275,9475],{"className":9476,"style":9366},[434],[275,9478,313],{"className":9479},[462],[275,9481],{"className":9482,"style":458},[457],[275,9484,9486,9489],{"className":9485},[430],[275,9487],{"className":9488,"style":2026},[434],[275,9490,9464],{"className":9491},[447],"（更严格）。飞牛官方说明「调低差异阈值，相似度要求会提高」—— 按这个公式看就完全自洽了：差异阈值越低，门槛越高，只有长得更像的才会被并进同一个人物相册。",[261,9494,9496],{"id":9495},"_65-聚类自动生成人物相册dbscan","6.5 聚类：自动生成人物相册（DBSCAN）",[16,9498,9499,9500,9503],{},"相册里可能有几千张脸，不可能两两人工对比。系统把这步交给",[20,9501,9502],{},"无监督聚类","：把所有 512 维向量丢进聚类算法，让「距离近」的脸自动归成一组，一组就是一个人物相册。",[16,9505,9506,9507,9510,9511,9514],{},"Immich 官方说明其聚类算法是 ",[20,9508,9509],{},"DBSCAN 的变体","。DBSCAN 是纯",[20,9512,9513],{},"密度","聚类，不需要预知有多少个人，数学定义很干净：",[16,9516,9517],{},[275,9518,9520,9587],{"className":9519},[278],[275,9521,9523],{"className":9522},[282],[284,9524,9525],{"xmlns":286},[288,9526,9527,9584],{},[291,9528,9529,9536,9538,9540,9542,9544,9547,9550,9552,9554,9556,9559,9562,9564,9566,9568,9570,9572,9574,9577,9579,9581],{},[353,9530,9531,9533],{},[294,9532,4914],{},[294,9534,9535],{},"ε",[298,9537,304],{"stretchy":303},[294,9539,16],{},[298,9541,310],{"stretchy":303},[298,9543,313],{},[298,9545,9546],{"stretchy":303},"{",[1659,9548,9549],{}," ",[294,9551,7147],{},[298,9553,7228],{},[294,9555,7178],{},[298,9557,9558],{},"∣",[294,9560,9561],{"mathvariant":332},"dist",[298,9563,300],{},[298,9565,304],{"stretchy":303},[294,9567,16],{},[298,9569,1589],{"separator":426},[294,9571,7147],{},[298,9573,310],{"stretchy":303},[298,9575,9576],{},"≤",[294,9578,9535],{},[1659,9580,9549],{},[298,9582,9583],{"stretchy":303},"}",[418,9585,9586],{"encoding":420},"N_\\varepsilon(p) = \\{\\, q \\in D \\mid \\operatorname{dist}(p, q) \\le \\varepsilon \\,\\}",[275,9588,9590,9655,9679,9697,9737],{"className":9589,"ariaHidden":426},[425],[275,9591,9593,9596,9637,9640,9643,9646,9649,9652],{"className":9592},[430],[275,9594],{"className":9595,"style":435},[434],[275,9597,9599,9602],{"className":9598},[447],[275,9600,4914],{"className":9601,"style":4930},[447,448],[275,9603,9605],{"className":9604},[672],[275,9606,9608,9629],{"className":9607},[486,487],[275,9609,9611,9626],{"className":9610},[491],[275,9612,9614],{"className":9613,"style":8414},[495],[275,9615,9617,9620],{"style":9616},"top:-2.55em;margin-left:-0.109em;margin-right:0.05em;",[275,9618],{"className":9619,"style":1224},[503],[275,9621,9623],{"className":9622},[508,509,510,511],[275,9624,9535],{"className":9625},[447,448,511],[275,9627,573],{"className":9628},[572],[275,9630,9632],{"className":9631},[491],[275,9633,9635],{"className":9634,"style":1287},[495],[275,9636],{},[275,9638,304],{"className":9639},[443],[275,9641,16],{"className":9642},[447,448],[275,9644,310],{"className":9645},[453],[275,9647],{"className":9648,"style":458},[457],[275,9650,313],{"className":9651},[462],[275,9653],{"className":9654,"style":458},[457],[275,9656,9658,9661,9664,9667,9670,9673,9676],{"className":9657},[430],[275,9659],{"className":9660,"style":435},[434],[275,9662,9546],{"className":9663},[443],[275,9665],{"className":9666,"style":1246},[457],[275,9668,7147],{"className":9669,"style":6743},[447,448],[275,9671],{"className":9672,"style":458},[457],[275,9674,7228],{"className":9675},[462],[275,9677],{"className":9678,"style":458},[457],[275,9680,9682,9685,9688,9691,9694],{"className":9681},[430],[275,9683],{"className":9684,"style":435},[434],[275,9686,7178],{"className":9687,"style":449},[447,448],[275,9689],{"className":9690,"style":458},[457],[275,9692,9558],{"className":9693},[462],[275,9695],{"className":9696,"style":458},[457],[275,9698,9700,9703,9710,9713,9716,9719,9722,9725,9728,9731,9734],{"className":9699},[430],[275,9701],{"className":9702,"style":435},[434],[275,9704,9706],{"className":9705},[439],[275,9707,9561],{"className":9708},[447,9709],"mathrm",[275,9711,304],{"className":9712},[443],[275,9714,16],{"className":9715},[447,448],[275,9717,1589],{"className":9718},[1619],[275,9720],{"className":9721,"style":1246},[457],[275,9723,7147],{"className":9724,"style":6743},[447,448],[275,9726,310],{"className":9727},[453],[275,9729],{"className":9730,"style":458},[457],[275,9732,9576],{"className":9733},[462],[275,9735],{"className":9736,"style":458},[457],[275,9738,9740,9743,9746,9749],{"className":9739},[430],[275,9741],{"className":9742,"style":435},[434],[275,9744,9535],{"className":9745},[447,448],[275,9747],{"className":9748,"style":1246},[457],[275,9750,9583],{"className":9751},[453],[16,9753,9754],{},[275,9755,9757,9810],{"className":9756},[278],[275,9758,9760],{"className":9759},[282],[284,9761,9762],{"xmlns":286},[288,9763,9764,9807],{},[291,9765,9766,9769,9787,9790],{},[1659,9767,9768],{},"核心点：",[291,9770,9771,9773,9779,9781,9783,9785],{},[298,9772,9558],{"fence":426},[353,9774,9775,9777],{},[294,9776,4914],{},[294,9778,9535],{},[298,9780,304],{"stretchy":303},[294,9782,16],{},[298,9784,310],{"stretchy":303},[298,9786,9558],{"fence":426},[298,9788,9789],{},"≥",[291,9791,9792,9795,9797,9800,9803,9805],{},[294,9793,9794],{"mathvariant":332},"M",[294,9796,360],{"mathvariant":332},[294,9798,9799],{"mathvariant":332},"n",[294,9801,9802],{"mathvariant":332},"P",[294,9804,7813],{"mathvariant":332},[294,9806,5152],{"mathvariant":332},[418,9808,9809],{"encoding":420},"\\text{核心点：} \\left| N_\\varepsilon(p) \\right| \\ge \\mathrm{MinPts}",[275,9811,9813,9896],{"className":9812,"ariaHidden":426},[425],[275,9814,9816,9819,9826,9829,9887,9890,9893],{"className":9815},[430],[275,9817],{"className":9818,"style":435},[434],[275,9820,9822],{"className":9821},[447,128],[275,9823,9768],{"className":9824},[447,9825],"cjk_fallback",[275,9827],{"className":9828,"style":1246},[457],[275,9830,9832,9835,9875,9878,9881,9884],{"className":9831},[5612],[275,9833,9558],{"className":9834,"style":5617},[443,5616],[275,9836,9838,9841],{"className":9837},[447],[275,9839,4914],{"className":9840,"style":4930},[447,448],[275,9842,9844],{"className":9843},[672],[275,9845,9847,9867],{"className":9846},[486,487],[275,9848,9850,9864],{"className":9849},[491],[275,9851,9853],{"className":9852,"style":8414},[495],[275,9854,9855,9858],{"style":9616},[275,9856],{"className":9857,"style":1224},[503],[275,9859,9861],{"className":9860},[508,509,510,511],[275,9862,9535],{"className":9863},[447,448,511],[275,9865,573],{"className":9866},[572],[275,9868,9870],{"className":9869},[491],[275,9871,9873],{"className":9872,"style":1287},[495],[275,9874],{},[275,9876,304],{"className":9877},[443],[275,9879,16],{"className":9880},[447,448],[275,9882,310],{"className":9883},[453],[275,9885,9558],{"className":9886,"style":5617},[453,5616],[275,9888],{"className":9889,"style":458},[457],[275,9891,9789],{"className":9892},[462],[275,9894],{"className":9895,"style":458},[457],[275,9897,9899,9902],{"className":9898},[430],[275,9900],{"className":9901,"style":4926},[434],[275,9903,9905],{"className":9904},[447],[275,9906,9908],{"className":9907},[447,9709],"MinPts",[16,9910,9911],{},"逐条拆开：",[25,9913,9914,10119,10165,10306,10385],{},[28,9915,9916,10001,10002,10030,10031,10060,10061,10089,10090,10118],{},[275,9917,9919,9943],{"className":9918},[278],[275,9920,9922],{"className":9921},[282],[284,9923,9924],{"xmlns":286},[288,9925,9926,9940],{},[291,9927,9928,9934,9936,9938],{},[353,9929,9930,9932],{},[294,9931,4914],{},[294,9933,9535],{},[298,9935,304],{"stretchy":303},[294,9937,16],{},[298,9939,310],{"stretchy":303},[418,9941,9942],{"encoding":420},"N_\\varepsilon(p)",[275,9944,9946],{"className":9945,"ariaHidden":426},[425],[275,9947,9949,9952,9992,9995,9998],{"className":9948},[430],[275,9950],{"className":9951,"style":435},[434],[275,9953,9955,9958],{"className":9954},[447],[275,9956,4914],{"className":9957,"style":4930},[447,448],[275,9959,9961],{"className":9960},[672],[275,9962,9964,9984],{"className":9963},[486,487],[275,9965,9967,9981],{"className":9966},[491],[275,9968,9970],{"className":9969,"style":8414},[495],[275,9971,9972,9975],{"style":9616},[275,9973],{"className":9974,"style":1224},[503],[275,9976,9978],{"className":9977},[508,509,510,511],[275,9979,9535],{"className":9980},[447,448,511],[275,9982,573],{"className":9983},[572],[275,9985,9987],{"className":9986},[491],[275,9988,9990],{"className":9989,"style":1287},[495],[275,9991],{},[275,9993,304],{"className":9994},[443],[275,9996,16],{"className":9997},[447,448],[275,9999,310],{"className":10000},[453]," 是 ",[275,10003,10005,10018],{"className":10004},[278],[275,10006,10008],{"className":10007},[282],[284,10009,10010],{"xmlns":286},[288,10011,10012,10016],{},[291,10013,10014],{},[294,10015,16],{},[418,10017,16],{"encoding":420},[275,10019,10021],{"className":10020,"ariaHidden":426},[425],[275,10022,10024,10027],{"className":10023},[430],[275,10025],{"className":10026,"style":7159},[434],[275,10028,16],{"className":10029},[447,448]," 的 ",[275,10032,10034,10048],{"className":10033},[278],[275,10035,10037],{"className":10036},[282],[284,10038,10039],{"xmlns":286},[288,10040,10041,10045],{},[291,10042,10043],{},[294,10044,9535],{},[418,10046,10047],{"encoding":420},"\\varepsilon",[275,10049,10051],{"className":10050,"ariaHidden":426},[425],[275,10052,10054,10057],{"className":10053},[430],[275,10055],{"className":10056,"style":1714},[434],[275,10058,9535],{"className":10059},[447,448]," 邻域：以 ",[275,10062,10064,10077],{"className":10063},[278],[275,10065,10067],{"className":10066},[282],[284,10068,10069],{"xmlns":286},[288,10070,10071,10075],{},[291,10072,10073],{},[294,10074,16],{},[418,10076,16],{"encoding":420},[275,10078,10080],{"className":10079,"ariaHidden":426},[425],[275,10081,10083,10086],{"className":10082},[430],[275,10084],{"className":10085,"style":7159},[434],[275,10087,16],{"className":10088},[447,448]," 为圆心、",[275,10091,10093,10106],{"className":10092},[278],[275,10094,10096],{"className":10095},[282],[284,10097,10098],{"xmlns":286},[288,10099,10100,10104],{},[291,10101,10102],{},[294,10103,9535],{},[418,10105,10047],{"encoding":420},[275,10107,10109],{"className":10108,"ariaHidden":426},[425],[275,10110,10112,10115],{"className":10111},[430],[275,10113],{"className":10114,"style":1714},[434],[275,10116,9535],{"className":10117},[447,448]," 为半径内的所有点；",[28,10120,10121,10122,10164],{},"核心点：邻域内至少有 ",[275,10123,10125,10149],{"className":10124},[278],[275,10126,10128],{"className":10127},[282],[284,10129,10130],{"xmlns":286},[288,10131,10132,10146],{},[291,10133,10134,10136,10138,10140,10142,10144],{},[294,10135,9794],{"mathvariant":332},[294,10137,360],{"mathvariant":332},[294,10139,9799],{"mathvariant":332},[294,10141,9802],{"mathvariant":332},[294,10143,7813],{"mathvariant":332},[294,10145,5152],{"mathvariant":332},[418,10147,10148],{"encoding":420},"\\mathrm{MinPts}",[275,10150,10152],{"className":10151,"ariaHidden":426},[425],[275,10153,10155,10158],{"className":10154},[430],[275,10156],{"className":10157,"style":4926},[434],[275,10159,10161],{"className":10160},[447],[275,10162,9908],{"className":10163},[447,9709]," 个点；",[28,10166,10167,10168,10276,10277,10305],{},"密度直达：",[275,10169,10171,10199],{"className":10170},[278],[275,10172,10174],{"className":10173},[282],[284,10175,10176],{"xmlns":286},[288,10177,10178,10196],{},[291,10179,10180,10182,10184,10190,10192,10194],{},[294,10181,7147],{},[298,10183,7228],{},[353,10185,10186,10188],{},[294,10187,4914],{},[294,10189,9535],{},[298,10191,304],{"stretchy":303},[294,10193,16],{},[298,10195,310],{"stretchy":303},[418,10197,10198],{"encoding":420},"q \\in N_\\varepsilon(p)",[275,10200,10202,10221],{"className":10201,"ariaHidden":426},[425],[275,10203,10205,10209,10212,10215,10218],{"className":10204},[430],[275,10206],{"className":10207,"style":10208},[434],"height:0.7335em;vertical-align:-0.1944em;",[275,10210,7147],{"className":10211,"style":6743},[447,448],[275,10213],{"className":10214,"style":458},[457],[275,10216,7228],{"className":10217},[462],[275,10219],{"className":10220,"style":458},[457],[275,10222,10224,10227,10267,10270,10273],{"className":10223},[430],[275,10225],{"className":10226,"style":435},[434],[275,10228,10230,10233],{"className":10229},[447],[275,10231,4914],{"className":10232,"style":4930},[447,448],[275,10234,10236],{"className":10235},[672],[275,10237,10239,10259],{"className":10238},[486,487],[275,10240,10242,10256],{"className":10241},[491],[275,10243,10245],{"className":10244,"style":8414},[495],[275,10246,10247,10250],{"style":9616},[275,10248],{"className":10249,"style":1224},[503],[275,10251,10253],{"className":10252},[508,509,510,511],[275,10254,9535],{"className":10255},[447,448,511],[275,10257,573],{"className":10258},[572],[275,10260,10262],{"className":10261},[491],[275,10263,10265],{"className":10264,"style":1287},[495],[275,10266],{},[275,10268,304],{"className":10269},[443],[275,10271,16],{"className":10272},[447,448],[275,10274,310],{"className":10275},[453]," 且 ",[275,10278,10280,10293],{"className":10279},[278],[275,10281,10283],{"className":10282},[282],[284,10284,10285],{"xmlns":286},[288,10286,10287,10291],{},[291,10288,10289],{},[294,10290,16],{},[418,10292,16],{"encoding":420},[275,10294,10296],{"className":10295,"ariaHidden":426},[425],[275,10297,10299,10302],{"className":10298},[430],[275,10300],{"className":10301,"style":7159},[434],[275,10303,16],{"className":10304},[447,448]," 是核心点；",[28,10307,10308,10309,10384],{},"密度可达：存在一条核心点链 ",[275,10310,10312,10336],{"className":10311},[278],[275,10313,10315],{"className":10314},[282],[284,10316,10317],{"xmlns":286},[288,10318,10319,10333],{},[291,10320,10321,10323,10326,10329,10331],{},[294,10322,16],{},[298,10324,10325],{},"→",[298,10327,10328],{},"⋯",[298,10330,10325],{},[294,10332,7147],{},[418,10334,10335],{"encoding":420},"p \\to \\dots \\to q",[275,10337,10339,10357,10375],{"className":10338,"ariaHidden":426},[425],[275,10340,10342,10345,10348,10351,10354],{"className":10341},[430],[275,10343],{"className":10344,"style":7159},[434],[275,10346,16],{"className":10347},[447,448],[275,10349],{"className":10350,"style":458},[457],[275,10352,10325],{"className":10353},[462],[275,10355],{"className":10356,"style":458},[457],[275,10358,10360,10363,10366,10369,10372],{"className":10359},[430],[275,10361],{"className":10362,"style":9366},[434],[275,10364,10328],{"className":10365},[5612],[275,10367],{"className":10368,"style":458},[457],[275,10370,10325],{"className":10371},[462],[275,10373],{"className":10374,"style":458},[457],[275,10376,10378,10381],{"className":10377},[430],[275,10379],{"className":10380,"style":7159},[434],[275,10382,7147],{"className":10383,"style":6743},[447,448],"；",[28,10386,10387],{},"噪声：不属于任何簇的点（孤立点）。",[16,10389,10390,10391,10394],{},"直观理解：",[20,10392,10393],{},"把每个人脸当成空间里的一个点，凡是「周围挤得够密」的区域各自成一簇；稀稀拉拉的点直接判为噪声","—— 正好对应「只出现过一次的路人甲不生成人物相册」。",[7087,10396,10397],{},[16,10398,10399,10400,10441,10442,10470],{},"对照飞牛的设置就更好懂了：「生成人物的最少照片数（默认 2）」≈\n",[275,10401,10403,10426],{"className":10402},[278],[275,10404,10406],{"className":10405},[282],[284,10407,10408],{"xmlns":286},[288,10409,10410,10424],{},[291,10411,10412,10414,10416,10418,10420,10422],{},[294,10413,9794],{"mathvariant":332},[294,10415,360],{"mathvariant":332},[294,10417,9799],{"mathvariant":332},[294,10419,9802],{"mathvariant":332},[294,10421,7813],{"mathvariant":332},[294,10423,5152],{"mathvariant":332},[418,10425,10148],{"encoding":420},[275,10427,10429],{"className":10428,"ariaHidden":426},[425],[275,10430,10432,10435],{"className":10431},[430],[275,10433],{"className":10434,"style":4926},[434],[275,10436,10438],{"className":10437},[447],[275,10439,9908],{"className":10440},[447,9709],"\n—— 一个人至少出现几次才配拥有人物相册；「相似度差异阈值（默认 0.36）」≈\n",[275,10443,10445,10458],{"className":10444},[278],[275,10446,10448],{"className":10447},[282],[284,10449,10450],{"xmlns":286},[288,10451,10452,10456],{},[291,10453,10454],{},[294,10455,9535],{},[418,10457,10047],{"encoding":420},[275,10459,10461],{"className":10460,"ariaHidden":426},[425],[275,10462,10464,10467],{"className":10463},[430],[275,10465],{"className":10466,"style":1714},[434],[275,10468,9535],{"className":10469},[447,448],"\n—— 脸像到什么程度算同一人（半径内算邻居）。",[16,10472,10473],{},"聚类只是初筛，最后一步永远是人类兜底：命名、合并（同一个人被拆开）、移除（混入陌生人）。飞牛和 Immich 都提供这些手动修正操作。",[11,10475,10477],{"id":10476},"_7-三家实现横向拆解","7 三家实现横向拆解",[45,10479,10480,10493],{},[48,10481,10482],{},[51,10483,10484,10487,10489,10491],{},[54,10485,10486],{},"维度",[54,10488,7057],{},[54,10490,7068],{},[54,10492,7079],{},[64,10494,10495,10508,10521,10535,10549,10563,10577],{},[51,10496,10497,10499,10502,10505],{},[69,10498,71],{},[69,10500,10501],{},"CLIP（默认 ViT-B-32，可换）",[69,10503,10504],{},"CLIP（多语言模型，中文友好）",[69,10506,10507],{},"智能识别模型（基础 \u002F 增强）",[51,10509,10510,10513,10516,10518],{},[69,10511,10512],{},"人脸识别",[69,10514,10515],{},"insightface buffalo_l",[69,10517,10515],{},[69,10519,10520],{},"人脸识别 - 标准模型",[51,10522,10523,10526,10529,10532],{},[69,10524,10525],{},"OCR",[69,10527,10528],{},"支持（本地 OCR）",[69,10530,10531],{},"PP-OCRv5_mobile",[69,10533,10534],{},"未单列",[51,10536,10537,10540,10543,10546],{},[69,10538,10539],{},"向量存储",[69,10541,10542],{},"Postgres + pgvector → VectorChord",[69,10544,10545],{},"服务端内置索引",[69,10547,10548],{},"本地存储",[51,10550,10551,10554,10557,10560],{},[69,10552,10553],{},"架构形态",[69,10555,10556],{},"server + 独立 machine-learning 容器",[69,10558,10559],{},"服务端进程 \u002F 可接外部 API",[69,10561,10562],{},"相册应用内置模块",[51,10564,10565,10568,10571,10574],{},[69,10566,10567],{},"任务调度",[69,10569,10570],{},"队列 + 后台任务",[69,10572,10573],{},"后台任务列表（人脸特征、CLIP、场景识别）",[69,10575,10576],{},"安装模型后自动执行，可手动补扫",[51,10578,10579,10582,10585,10588],{},[69,10580,10581],{},"开源",[69,10583,10584],{},"✅ 开源",[69,10586,10587],{},"❌ 商业（免费）",[69,10589,10590],{},"❌ 闭源（随 fnOS 提供）",[16,10592,10593],{},"几个值得注意的差异：",[25,10595,10596,10606,10612],{},[28,10597,10598,10601,10602,10605],{},[20,10599,10600],{},"MT Photos 把流程拆成了可见的后台任务","：人脸特征识别 → 人脸特征对比（生成人物相册）→ CLIP 识别 → 照片场景识别。场景识别还",[20,10603,10604],{},"基于 CLIP 识别结果二次加工","，比如识别出「室内 \u002F 户外」这类粗分类；",[28,10607,10608,10611],{},[20,10609,10610],{},"飞牛把「增强识别」做成了选项","：视频默认只做基础识别，开启「视频增强识别」后对视频内容加深理解，搜索能捞到更多视频项，代价是计算资源占用上升；",[28,10613,10614,10617],{},[20,10615,10616],{},"Immich 的开源生态最灵活","：模型可换、向量库可换、还能用外部 ML API 替代本地推理。",[11,10619,10621],{"id":10620},"_8-部署与性能模型跑在哪","8 部署与性能：模型跑在哪",[16,10623,10624,10625,10628],{},"三个产品的模型都跑在本地，技术栈高度一致：",[20,10626,10627],{},"ONNX Runtime + 预训练模型文件","（insightface、CLIP 都是 ONNX 格式），好处是 CPU 可跑、有 GPU 时自动加速。",[16,10630,10631],{},"硬件门槛以飞牛官方给的最低要求为准（三家量级接近）：",[45,10633,10634,10644],{},[48,10635,10636],{},[51,10637,10638,10641],{},[54,10639,10640],{},"项目",[54,10642,10643],{},"要求",[64,10645,10646,10654,10662,10670],{},[51,10647,10648,10651],{},[69,10649,10650],{},"内存",[69,10652,10653],{},"最低 2 GB；智能识别 - 增强模型需 8 GB",[51,10655,10656,10659],{},[69,10657,10658],{},"模型占用空间",[69,10660,10661],{},"预留 20 GB 以上",[51,10663,10664,10667],{},[69,10665,10666],{},"GPU",[69,10668,10669],{},"人脸识别支持 Intel GPU 与 NVIDIA（GeForce 700 以上）；智能识别同样支持",[51,10671,10672,10675],{},[69,10673,10674],{},"CPU 兜底",[69,10676,10677],{},"无 GPU 也能跑，只是慢",[16,10679,10680],{},"性能上还有三条通用优化手段：",[6901,10682,10683,10689,10695],{},[28,10684,10685,10688],{},[20,10686,10687],{},"送缩略图，不送原图","。推理输入的是预览图（几百像素），不是原尺寸照片，推理速度与内存占用差一个数量级；",[28,10690,10691,10694],{},[20,10692,10693],{},"视频抽帧","。视频先抽关键帧 \u002F 间隔帧，只对帧做人脸与内容识别，识别结果回挂到整个视频；",[28,10696,10697,10700],{},[20,10698,10699],{},"任务队列分批执行","。入库高峰时排队跑，避免推理服务把 NAS 的 CPU 打满。",[11,10702,10704],{"id":10703},"_9-局限与优化方向","9 局限与优化方向",[16,10706,10707],{},"原理清楚了，也该说清楚它的边界：",[25,10709,10710,10716,10722,10728,10734],{},[28,10711,10712,10715],{},[20,10713,10714],{},"CLIP 是「语义近似」不是「精确理解」","。「红色车子左边的那个人」这类空间 \u002F 数量关系，CLIP 表现很弱；它擅长的是「整体像不像」，不是「逻辑对不对」；",[28,10717,10718,10721],{},[20,10719,10720],{},"聚类永远是启发式的","。同一个人被拆成多个相册、路人被聚成「人物」，是常态，必须有手动合并 \u002F 移除兜底；",[28,10723,10724,10727],{},[20,10725,10726],{},"阈值是玄学","。检测阈值、相似度阈值、最少照片数，每个都影响结果，改完还得重置重跑；",[28,10729,10730,10733],{},[20,10731,10732],{},"视频识别计算量大","。全量视频增强识别，小内存 NAS 会明显卡顿；",[28,10735,10736,10739],{},[20,10737,10738],{},"中文语义模型的差距","。用英文 CLIP 搜中文描述会明显变差，选模型时优先多语言版本（如 MT Photos 默认款）。",[16,10741,10742],{},"可以预见的方向：CLIP 往 SigLIP 这类更高效的双塔演进、向量库往更省磁盘的方向走（VectorChord 已经是这个方向）、人脸模型针对亚洲面孔持续微调（MT Photos 选 insightface 的理由之一就是「对亚洲人脸准确率更高」）。",[11,10744,10746],{"id":10745},"_10-总结","10 总结",[25,10748,10749,10755,10760,10766,10772],{},[28,10750,10751,10754],{},[20,10752,10753],{},"一句话搜图"," = CLIP 双塔模型把图和句子映射到同一向量空间 + 向量检索按余弦相似度取 top-k；",[28,10756,10757,10759],{},[20,10758,82],{}," = 人脸检测（找脸）→ 相似变换对齐（摆正）→ ArcFace 提取 512 维特征 → DBSCAN 密度聚类自动分组；",[28,10761,10762,10765],{},[20,10763,10764],{},"对比两张图是不是同一个人"," = 两个 512 维向量算余弦相似度，超阈值即同一人；",[28,10767,10768,10771],{},[20,10769,10770],{},"数学内核不是傅里叶","：向量内积（余弦相似度）、对比学习（InfoNCE）、仿射变换（对齐）、密度聚类（DBSCAN）才是主角；DCT 只负责 JPEG 压缩；",[28,10773,10774,10776],{},[20,10775,152],{},"是自部署相册与云相册的分水岭，照片不出 NAS，换来的是隐私，付出的是算力。",[11,10778,10779],{"id":10779},"参考",[25,10781,10782,10790,10797,10804,10811,10818,10821],{},[28,10783,10784,10785],{},"Immich 官方文档：Facial Recognition \u002F Searching \u002F FAQ —— ",[321,10786,10787],{"href":10787,"rel":10788},"https:\u002F\u002Fdocs.immich.app",[10789],"nofollow",[28,10791,10792,10793],{},"MT Photos 文档：后台任务 \u002F 使用其他 CLIP 模型 \u002F 添加人脸识别 API —— ",[321,10794,10795],{"href":10795,"rel":10796},"https:\u002F\u002Fmtmt.tech\u002Fdocs",[10789],[28,10798,10799,10800],{},"飞牛帮助中心：AI 相册功能说明 —— ",[321,10801,10802],{"href":10802,"rel":10803},"https:\u002F\u002Fhelp.fnnas.com\u002Fzh-CN\u002Farticles\u002Fv1\u002Fphoto\u002Fphoto-ai",[10789],[28,10805,10806,10807],{},"OpenAI：CLIP: Connecting text and images —— ",[321,10808,10809],{"href":10809,"rel":10810},"https:\u002F\u002Fopenai.com\u002Findex\u002Fclip",[10789],[28,10812,10813,10814],{},"InsightFace：人脸检测与识别模型库 —— ",[321,10815,10816],{"href":10816,"rel":10817},"https:\u002F\u002Fgithub.com\u002Fdeepinsight\u002Finsightface",[10789],[28,10819,10820],{},"Deng et al.：ArcFace: Additive Angular Margin Loss for Deep Face Recognition（CVPR 2019）",[28,10822,10823],{},"Ester et al.：A Density-Based Algorithm for Discovering Clusters（KDD 1996，DBSCAN 原始论文）",[16,10825,10826],{},"Created with ❤️ by 张萌萌",{"title":132,"searchDepth":10828,"depth":10828,"links":10829},2,[10830,10831,10832,10838,10845,10849,10856,10857,10858,10859,10860],{"id":13,"depth":10828,"text":14},{"id":117,"depth":10828,"text":118},{"id":156,"depth":10828,"text":157,"children":10833},[10834,10836,10837],{"id":263,"depth":10835,"text":264},3,{"id":4888,"depth":10835,"text":4889},{"id":6624,"depth":10835,"text":6625},{"id":6815,"depth":10828,"text":6816,"children":10839},[10840,10841,10842,10843,10844],{"id":6819,"depth":10835,"text":6820},{"id":6864,"depth":10835,"text":6865},{"id":6895,"depth":10835,"text":6896},{"id":7004,"depth":10835,"text":7005},{"id":7034,"depth":10835,"text":7035},{"id":7094,"depth":10828,"text":7095,"children":10846},[10847,10848],{"id":7104,"depth":10835,"text":7105},{"id":7623,"depth":10835,"text":7624},{"id":7643,"depth":10828,"text":7644,"children":10850},[10851,10852,10853,10854,10855],{"id":7656,"depth":10835,"text":7657},{"id":7681,"depth":10835,"text":7682},{"id":8959,"depth":10835,"text":8960},{"id":8986,"depth":10835,"text":8987},{"id":9495,"depth":10835,"text":9496},{"id":10476,"depth":10828,"text":10477},{"id":10620,"depth":10828,"text":10621},{"id":10703,"depth":10828,"text":10704},{"id":10745,"depth":10828,"text":10746},{"id":10779,"depth":10828,"text":10779},"AI",null,"2026-10-24","从 CLIP 双塔模型到人脸特征聚类，拆解 Immich、MT Photos、飞牛相册「一句话搜图」和「人物相册」背后的数学原理",false,"md","https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F10\u002F24\u002F1792840902453.avif",{"published":10863},5,true,"\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F05.AI-相册识别原理，一句话搜图是怎么做到的",{"title":5,"description":10864},"blog\u002F10-技术专栏\u002F50-AI\u002F05.AI 相册识别原理，一句话搜图是怎么做到的",[10861,10875,10512],"相册，CLIP","Du3ovSN82AifqFVQT0uYc9e3jkkVdRMWH6FQncm597I",[10878,10879,10883,10887,10891,10894,10897,10901,10904,10908,10912,10916,10920,10924,10928,10932,10936,10940,10944,10948,10951,10955,10959,10963,10967,10970,10974,10978,10982,10986,10990,10994,10998,11002,11006,11010,11014,11018,11021,11025,11029,11033,11037,11041,11044,11047,11050,11053,11056,11059,11062,11065,11068,11071,11074,11077,11080,11083,11086,11089,11092,11095],{"path":10871,"title":5,"date":10863},{"path":10880,"title":10881,"date":10882},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F16.IPv6与DNS的分手协议","IPv6 与 DNS 的分手协议","2026-10-02",{"path":10884,"title":10885,"date":10886},"\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F04.我的-AI-入坑记","我的 AI 入坑记","2026-09-24",{"path":10888,"title":10889,"date":10890},"\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F01.用-Docker-部署-Ollama-与-Open-WebUI-搭建本地大模型","用 Docker 部署 Ollama 与 Open WebUI 搭建本地大模型","2026-09-23",{"path":10892,"title":10893,"date":10890},"\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F02.用-New-API-搭建统一-LLM-网关与-Lucky-反代外网访问","用 New API 搭建统一 LLM 网关与 Lucky 反代外网访问",{"path":10895,"title":10896,"date":10890},"\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F03.用-Dify-搭建本地知识库让-AI-读懂你写的博客","用 Dify 搭建本地知识库，让 AI 读懂你写的博客",{"path":10898,"title":10899,"date":10900},"\u002Fblog\u002F20-生活碎片\u002F03-2026年秋季计划","2026 年秋季计划","2026-09-19",{"path":10902,"title":10903,"date":10900},"\u002Fblog\u002F30-学习笔记\u002F02.Python入门书单","Python 入门书单：从第一行代码到写出真正的程序",{"path":10905,"title":10906,"date":10907},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F09-Cloudflare-低延迟接入方案","Cloudflare 低延迟接入方案","2026-07-22 03:17:28",{"path":10909,"title":10910,"date":10911},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F08-Cloudflare-ImgBed-免费私有图床完整部署手册","Cloudflare ImgBed 免费私有图床完整部署手册","2026-07-19 02:09:08",{"path":10913,"title":10914,"date":10915},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F07-腾讯云-EdgeOne-边缘函数实现七牛-S3-随机图床-API","腾讯云 EdgeOne 边缘函数实现七牛云 & S3 存储随机图床 API","2026-07-13 21:25:48",{"path":10917,"title":10918,"date":10919},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F06-腾讯-EdgeOne-部署-Twikoo-评论系统指南","腾讯EdgeOne部署Twikoo评论系统指南","2026-06-14 17:41:11",{"path":10921,"title":10922,"date":10923},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F05-OpenList-接入-S3-对象存储完整使用教程","OpenList 接入 S3 对象存储完整使用教程","2026-06-11 13:08:07",{"path":10925,"title":10926,"date":10927},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F04-Cloudflare-R2-图床与全球加速方案","Cloudflare R2 图床与全球加速方案","2026-06-09 13:07:35",{"path":10929,"title":10930,"date":10931},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F03-免费图床与CDN加速方案","免费图床与 CDN 加速方案","2026-06-09",{"path":10933,"title":10934,"date":10935},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F02-零基础优雅搭建静态博客全教程","零基础优雅搭建静态博客全教程","2026-06-04",{"path":10937,"title":10938,"date":10939},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F01-远古产物—博客","赛博空间的私人岛屿：博客架构与风格美学","2026-06-03",{"path":10941,"title":10942,"date":10943},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F15.关于NAT回流与内网域名直连的终极指南","关于 NAT 回流与内网域名直连的终极指南","2026-05-13",{"path":10945,"title":10946,"date":10947},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F14.飞牛安全访问与Lucky反代雷池防护","飞牛安全访问与 Lucky 反代雷池防护","2026-02-03",{"path":10949,"title":10950,"date":10947},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F18.一键DD纯净系统脚本","一键 DD 纯净系统脚本",{"path":10952,"title":10953,"date":10954},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F17.Ventoy多系统启动盘制作与使用全指南","Ventoy 多系统启动盘制作与使用全指南","2026-02-02",{"path":10956,"title":10957,"date":10958},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F16.Emby元数据匹配与中文命名规范","Emby 元数据匹配与中文命名规范","2026-02-01",{"path":10960,"title":10961,"date":10962},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F15.基于PVE系统安装LXC-debian","基于 PVE 系统安装 LXC-debian","2026-01-19",{"path":10964,"title":10965,"date":10966},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F13.Lucky反向代理终极指南","Lucky 反向代理终极指南","2026-01-16",{"path":10968,"title":10969,"date":10966},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F14.OEC盒子Armbian刷机指南","OEC 盒子 Armbian 刷机指南",{"path":10971,"title":10972,"date":10973},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F13.oec-fnOS安装","OEC-Turbo (RK3566) 安装飞牛 OS","2026-01-15",{"path":10975,"title":10976,"date":10977},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F12.新的篇章，debian12的配置","新的篇章，debian12 的配置","2026-01-14",{"path":10979,"title":10980,"date":10981},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F11.飞牛OS安装后必要配置","飞牛 OS 安装后必要配置","2026-01-06",{"path":10983,"title":10984,"date":10985},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F11.NAS-导航页的终极形态","告别繁琐配置：NAS 导航页的终极形态 —— 从 Sun-Panel 到 FlatNAS","2026-01-05",{"path":10987,"title":10988,"date":10989},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F10.LogVar-弹幕-API-部署指南","LogVar 弹幕 API  (纯本地缓存版) 部署指南","2025-12-30",{"path":10991,"title":10992,"date":10993},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F10.基于Lucky与QMediaSync的飞牛远程媒体访问","基于 Lucky 与 QMediaSync 的飞牛远程媒体访问","2025-12-26",{"path":10995,"title":10996,"date":10997},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F09.新的篇章，PVE虚拟机","新的篇章，PVE虚拟机","2025-12-21",{"path":10999,"title":11000,"date":11001},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F08.Linux系统，音响有底噪","Linux 系统，音响有底噪怎么办？","2025-12-17",{"path":11003,"title":11004,"date":11005},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F07.飞牛OS的安装","飞牛 OS 的安装","2025-12-14",{"path":11007,"title":11008,"date":11009},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F06.Debian13换源","Debian13 换源","2025-11-29",{"path":11011,"title":11012,"date":11013},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F05.Kodi-CoreELEC安装指南","Kodi & CoreELEC 安装指南","2025-11-21",{"path":11015,"title":11016,"date":11017},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F09.兰空图床和高清图标库","兰空图床和高清图标库","2025-11-15",{"path":11019,"title":11020,"date":11017},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F04.N1盒子Armbian刷机与配置","N1 盒子 Armbian 刷机与配置",{"path":11022,"title":11023,"date":11024},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F08.你是否需要一个图床？","你是否需要一个图床？","2025-11-14",{"path":11026,"title":11027,"date":11028},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F03.飞牛NAS第三方应用商店安装","飞牛 NAS 第三方应用商店 (FnDepot) 安装指南","2025-10-13",{"path":11030,"title":11031,"date":11032},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F02.Hills播放器-Windows-安卓","Hills 播放器（Windows + 安卓）","2025-09-24",{"path":11034,"title":11035,"date":11036},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F01.一行代码降低服务器功耗","一行代码降低服务器功耗","2025-08-19",{"path":11038,"title":11039,"date":11040},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F01.容器-docker-docker-compose","容器 & docker & docker-compose","2025-08-05",{"path":11042,"title":11043,"date":11040},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F02.容器项目-传输类","容器项目&传输类",{"path":11045,"title":11046,"date":11040},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F03.容器项目-相册类","容器项目&相册类",{"path":11048,"title":11049,"date":11040},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F04.容器项目-媒体类","容器项目&媒体类",{"path":11051,"title":11052,"date":11040},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F05.Emby自有授权媒体库（一）","Emby 自有授权媒体库（一）",{"path":11054,"title":11055,"date":11040},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F06.Emby自有授权媒体库（二）","Emby 自有授权媒体库（二）",{"path":11057,"title":11058,"date":11040},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F07.Adguard-Home去广告","Adguard Home 去广告",{"path":11060,"title":11061,"date":11040},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F01.新的篇章，软路由","新的篇章，软路由",{"path":11063,"title":11064,"date":11040},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F02.如何玩公网，怎么远程访问（一）","如何玩公网，怎么远程访问（一）",{"path":11066,"title":11067,"date":11040},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F03.如何玩公网，怎么远程访问（二）","如何玩公网，怎么远程访问（二）",{"path":11069,"title":11070,"date":11040},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F04.如何玩公网，怎么远程访问（三）","如何玩公网，怎么远程访问（三）",{"path":11072,"title":11073,"date":11040},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F05.免费域名与远程访问","免费域名与远程访问",{"path":11075,"title":11076,"date":11040},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F06.没有公网如何远程访问","没有公网如何远程访问",{"path":11078,"title":11079,"date":11040},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F07.爱快与OpenWRT双软路由MAC地址重复问题修正","爱快与 OpenWRT 双软路由MAC地址重复问题修正",{"path":11081,"title":11082,"date":11040},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F08.OpenWRT扩容","OpenWRT 扩容",{"path":11084,"title":11085,"date":11040},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F09.OpenWRT旁路由一条龙教程","OpenWRT 旁路由一条龙教程",{"path":11087,"title":11088,"date":11040},"\u002Fblog\u002F20-生活碎片\u002F02.在裂缝中种满阳光","让灵魂带着光行走：在裂缝中种满太阳",{"path":11090,"title":11091,"date":11040},"\u002Fblog\u002F30-学习笔记\u002F01.Typora学习笔记","Typora学习笔记",{"path":11093,"title":11094,"date":11040},"\u002Fblog\u002F30-学习笔记\u002F02.Markdown-拓展","Markdown 拓展",{"path":11096,"title":11097,"date":11098},"\u002Fblog\u002F20-生活碎片\u002F01.拥抱生活中的光与热","拥抱生活中的光与热","2025-07-05",1793196777061]