-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
1514 lines (1514 loc) · 273 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>UCINET社交网络分析</title>
<url>/learn_blog/2024/03/23/UCINET%E7%A4%BE%E4%BA%A4%E7%BD%91%E7%BB%9C%E5%88%86%E6%9E%90/</url>
<content><![CDATA[<h1 id="1-共现矩阵"><a href="#1-共现矩阵" class="headerlink" title="1.共现矩阵"></a>1.共现矩阵</h1><h2 id="灰度共生矩阵"><a href="#灰度共生矩阵" class="headerlink" title="灰度共生矩阵"></a>灰度共生矩阵</h2><ul>
<li>先将图像转换成灰度图片</li>
<li>然后再用<code>graycomatirx</code>函数进行共生矩阵计算</li>
</ul>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment"># -*- coding: utf-8 -*-</span></span><br><span class="line"><span class="keyword">import</span> cv2</span><br><span class="line"><span class="keyword">import</span> numpy <span class="keyword">as</span> np</span><br><span class="line">np.set_printoptions(suppress=<span class="literal">True</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">glcm</span>(<span class="params">arr, d_x, d_y, gray_level=<span class="number">16</span></span>):</span><br><span class="line"> <span class="string">'''计算并返回归一化后的灰度共生矩阵'''</span></span><br><span class="line"> max_gray = arr.<span class="built_in">max</span>()</span><br><span class="line"> height, width = arr.shape</span><br><span class="line"> arr = arr.astype(np.float64) <span class="comment"># 将uint8类型转换为float64,以免数据失真</span></span><br><span class="line"> arr = arr * (gray_level - <span class="number">1</span>) // max_gray <span class="comment"># 若灰度级数大于gray_level,则将图像的灰度级缩小至gray_level,减小灰度共生矩阵的大小。量化后灰度值范围:0 ~ gray_level - 1</span></span><br><span class="line"> ret = np.zeros([gray_level, gray_level])</span><br><span class="line"> <span class="keyword">for</span> j <span class="keyword">in</span> <span class="built_in">range</span>(height - <span class="built_in">abs</span>(d_y)):</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(width - <span class="built_in">abs</span>(d_x)): <span class="comment"># range(width - d_x) #注释为源代码,经评论指出错误后修改</span></span><br><span class="line"> rows = arr[j][i].astype(<span class="built_in">int</span>)</span><br><span class="line"> cols = arr[j + d_y][i + d_x].astype(<span class="built_in">int</span>)</span><br><span class="line"> ret[rows][cols] += <span class="number">1</span></span><br><span class="line"> <span class="keyword">if</span> d_x >= d_y:</span><br><span class="line"> ret = ret / <span class="built_in">float</span>(height * (width - <span class="number">1</span>)) <span class="comment"># 归一化, 水平方向或垂直方向</span></span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> ret = ret / <span class="built_in">float</span>((height - <span class="number">1</span>) * (width - <span class="number">1</span>)) <span class="comment"># 归一化, 45度或135度方向</span></span><br><span class="line"> <span class="keyword">return</span> ret</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__==<span class="string">'__main__'</span>:</span><br><span class="line"> <span class="string">'''归一化时分母值根据角度theta变化,0度或90度时为height * (width - 1), 45度或135度时为(height - 1) * (width - 1)'''</span></span><br><span class="line"> fp = <span class="string">r'/home/jovyan/work/000.png'</span></span><br><span class="line"> img = cv2.imread(fp)</span><br><span class="line"> img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) <span class="comment"># 转换为灰度图像,uint8</span></span><br><span class="line"> <span class="comment">#glcm_0 = glcm(img_gray, 1, 0) # 水平方向</span></span><br><span class="line"> glcm_1 = glcm(img_gray, <span class="number">0</span>, <span class="number">1</span>) <span class="comment"># 垂直方向</span></span><br><span class="line"> <span class="comment"># glcm_2 = glcm(img_gray, 1, 1) # 45度方向</span></span><br><span class="line"> <span class="comment"># glcm_3 = glcm(img_gray, -1, 1) # 135度方向</span></span><br><span class="line"> <span class="built_in">print</span>(glcm_1)</span><br><span class="line"></span><br><span class="line"> np.save(<span class="string">'/home/jovyan/work/glcm_1.npy'</span>, glcm_1)</span><br></pre></td></tr></table></figure>
<p>我们将npy.文件格式转换为csv,再转化为Excel文件</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line">loaded_data = np.load(<span class="string">'/home/jovyan/work/glcm_1.npy'</span>) </span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> pandas <span class="keyword">as</span> pd </span><br><span class="line"> </span><br><span class="line">df = pd.DataFrame(loaded_data)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 保存为CSV文件 </span></span><br><span class="line">df.to_csv(<span class="string">'/home/jovyan/work/output.csv'</span>, index=<span class="literal">False</span>) </span><br><span class="line"> </span><br><span class="line"><span class="comment"># 保存为Excel文件(需要安装openpyxl或xlsxwriter库) </span></span><br><span class="line">df.to_excel(<span class="string">'output.xlsx'</span>, index=<span class="literal">False</span>)</span><br></pre></td></tr></table></figure>
<p>输出的表格如下图:</p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/image-20240323185009666.png" alt="image-20240323185009666"></p>
<h1 id="2-Ucinet分析"><a href="#2-Ucinet分析" class="headerlink" title="2 Ucinet分析"></a>2 Ucinet分析</h1><h2 id="2-1-输入矩阵中"><a href="#2-1-输入矩阵中" class="headerlink" title="2.1 输入矩阵中"></a>2.1 输入矩阵中</h2><p>菜单栏第三行第二个</p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/image-20240323185402089.png" alt="image-20240323185402089"></p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/image-20240323185201093.png" alt="image-20240323185201093"></p>
<p>随后保存</p>
<p><img src="C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20240323185323487.png" alt="image-20240323185323487"></p>
<h2 id="2-2-二值化"><a href="#2-2-二值化" class="headerlink" title="2.2 二值化"></a>2.2 二值化</h2><p>transform->dichotomize</p>
<pre><code> 0 1 2 3 4 5 6 7 8 9 1 1 1 1 1 1
- - - - - - - - - - - - - - - -
0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0
2 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
3 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
4 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0
5 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
6 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
7 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
8 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0
9 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0
10 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
11 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1
12 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1
13 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
14 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
15 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1
</code></pre><h2 id="2-3-生成网络"><a href="#2-3-生成网络" class="headerlink" title="2.3 生成网络"></a>2.3 生成网络</h2><p><img src="C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20240323185515725.png" alt="image-20240323185515725"></p>
<p>将刚才保存的共现矩阵导入</p>
<p><img src="C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20240323185610750.png" alt="image-20240323185610750"></p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/image-20240323185751157.png" alt="image-20240323185751157"></p>
<h2 id="2-4-中心性分析"><a href="#2-4-中心性分析" class="headerlink" title="2.4 中心性分析"></a>2.4 中心性分析</h2><p>Analysis->centralitymeasures</p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/20180415162735355" alt="img"></p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/image-20240323193324338.png" alt="image-20240323193324338"></p>
<h2 id="2-5-节点中心度"><a href="#2-5-节点中心度" class="headerlink" title="2.5 节点中心度"></a>2.5 节点中心度</h2><p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/image-20240323185849724.png" alt="image-20240323185849724"></p>
<p>FREEMAN’S DEGREE CENTRALITY MEASURES:</p>
<p>Diagonal valid? NO<br>Model: SYMMETRIC<br>Input dataset: cocomarix (C:\Users\lenovo\Desktop\论文\UCINET\cocomarix)</p>
<p> 1 2 3<br> Degree NrmDegree Share</p>
<hr>
<p> 8 7 0.017 13.909 0.130<br> 7 6 0.017 13.291 0.124<br> 9 8 0.014 10.977 0.103<br> 15 14 0.011 8.892 0.083<br> 10 9 0.010 8.241 0.077<br> 14 13 0.010 8.011 0.075<br> 6 5 0.009 7.025 0.066<br> 11 10 0.007 5.887 0.055<br> 13 12 0.007 5.866 0.055<br> 4 3 0.007 5.270 0.049<br> 12 11 0.006 4.755 0.045<br> 16 15 0.005 3.821 0.036<br> 3 2 0.005 3.633 0.034<br> 5 4 0.004 3.246 0.030<br> 2 1 0.003 2.043 0.019<br> 1 0 0.002 1.904 0.018</p>
<p>DESCRIPTIVE STATISTICS</p>
<p> 1 2 3<br> Degree NrmDegree Share</p>
<hr>
<p> 1 Mean 0.008 6.673 0.063<br> 2 Std Dev 0.004 3.572 0.033<br> 3 Sum 0.133 106.771 1.000<br> 4 Variance 0.000 12.763 0.001<br> 5 SSQ 0.001 916.710 0.080<br> 6 MCSSQ 0.000 204.204 0.018<br> 7 Euc Norm 0.038 30.277 0.284<br> 8 Minimum 0.002 1.904 0.018<br> 9 Maximum 0.017 13.909 0.130</p>
<p>Network Centralization = 8.27%<br>Heterogeneity = 8.04%. Normalized = 1.91%</p>
<p>Actor-by-centrality matrix saved as dataset FreemanDegree</p>
<hr>
<p>Running time: 00:00:01<br>Output generated: 23 3月 24 18:59:01<br>Copyright (c) 2002-8 Analytic Technologies</p>
<blockquote>
<p>NrmDegree 标准中心度</p>
<p>Mean 均值</p>
<p>Std Dev 标准差</p>
<p>Variance 方差</p>
<p>SSQ 平方差和</p>
<p>MCSSQ 平均值平方差和</p>
<p>Euc Norm 欧几里得范数</p>
</blockquote>
<h2 id="2-6-接近中心度"><a href="#2-6-接近中心度" class="headerlink" title="2.6 接近中心度"></a>2.6 接近中心度</h2><p>network->centrality->closeness</p>
<p>CLOSENESS CENTRALITY</p>
<p>Input dataset: cocomarix (C:\Users\lenovo\Desktop\论文\UCINET\cocomarix)<br>Method: Geodesic paths only (Freeman Closeness)<br>Output dataset: Closeness (C:\Users\lenovo\Desktop\论文\UCINET\Closeness)</p>
<p>Note: Data not symmetric, therefore separate in-closeness & out-closeness computed.</p>
<p>Closeness Centrality Measures</p>
<pre><code> 1 2 3 4
inFarness outFarness inCloseness outCloseness
------------ ------------ ------------ ------------
</code></pre><p> 11 10 16.000 16.000 93.750 93.750<br> 10 9 16.000 18.000 93.750 83.333<br> 7 6 16.000 17.000 93.750 88.235<br> 12 11 17.000 18.000 88.235 83.333<br> 6 5 17.000 19.000 88.235 78.947<br> 8 7 17.000 17.000 88.235 88.235<br> 9 8 18.000 18.000 83.333 83.333<br> 5 4 18.000 18.000 83.333 83.333<br> 4 3 18.000 20.000 83.333 75.000<br> 13 12 19.000 18.000 78.947 83.333<br> 3 2 20.000 18.000 75.000 83.333<br> 14 13 20.000 21.000 75.000 71.429<br> 15 14 21.000 22.000 71.429 68.182<br> 2 1 22.000 20.000 68.182 75.000<br> 16 15 26.000 25.000 57.692 60.000<br> 1 0 29.000 25.000 51.724 60.000</p>
<p>Statistics</p>
<pre><code> 1 2 3 4
inFarness outFarness inCloseness outCloseness
------------ ------------ ------------ ------------
</code></pre><p> 1 Mean 19.375 19.375 79.621 78.674<br> 2 Std Dev 3.569 2.595 12.153 9.445<br> 3 Sum 310.000 310.000 1273.930 1258.778<br> 4 Variance 12.734 6.734 147.693 89.217<br> 5 SSQ 6210.000 6114.000 103794.195 100460.148<br> 6 MCSSQ 203.750 107.750 2363.083 1427.469<br> 7 Euc Norm 78.804 78.192 322.171 316.954<br> 8 Minimum 16.000 16.000 51.724 60.000<br> 9 Maximum 29.000 25.000 93.750 93.750</p>
<p>Network in-Centralization = 31.22%<br>Network out-Centralization = 33.31%</p>
<p>Output actor-by-centrality measure matrix saved as dataset Closeness (C:\Users\lenovo\Desktop\论文\UCINET\Closeness)</p>
<hr>
<p>Running time: 00:00:01<br>Output generated: 23 3月 24 19:37:04<br>Copyright (c) 1999-2008 Analytic Technologies</p>
<h2 id="2-7-中间中心度"><a href="#2-7-中间中心度" class="headerlink" title="2.7 中间中心度"></a>2.7 中间中心度</h2><p>network->centrality->freeman betweenness->node betweenness</p>
<p>FREEMAN BETWEENNESS CENTRALITY</p>
<p>Input dataset: cocomarix (C:\Users\lenovo\Desktop\论文\UCINET\cocomarix)</p>
<p>Important note: this routine binarizes but does NOT symmetrize.</p>
<p>Un-normalized centralization: 115.007</p>
<pre><code> 1 2
Betweenness nBetweenness
------------ ------------
</code></pre><p> 11 10 11.563 5.506<br> 7 6 7.874 3.749<br> 5 4 6.907 3.289<br> 12 11 6.215 2.959<br> 10 9 5.533 2.635<br> 4 3 5.395 2.569<br> 8 7 4.846 2.308<br> 3 2 4.621 2.201<br> 13 12 4.389 2.090<br> 6 5 3.718 1.771<br> 9 8 2.939 1.400<br> 14 13 2.330 1.109<br> 2 1 2.310 1.100<br> 15 14 1.359 0.647<br> 1 0 0.000 0.000<br> 16 15 0.000 0.000</p>
<p>DESCRIPTIVE STATISTICS FOR EACH MEASURE</p>
<pre><code> 1 2
Betweenness nBetweenness
------------ ------------
</code></pre><p> 1 Mean 4.375 2.083<br> 2 Std Dev 2.901 1.382<br> 3 Sum 70.000 33.333<br> 4 Variance 8.418 1.909<br> 5 SSQ 440.937 99.986<br> 6 MCSSQ 134.687 30.541<br> 7 Euc Norm 20.999 9.999<br> 8 Minimum 0.000 0.000<br> 9 Maximum 11.563 5.506</p>
<p>Network Centralization Index = 3.65%</p>
<p>Output actor-by-centrality measure matrix saved as dataset FreemanBetweenness</p>
<hr>
<p>Running time: 00:00:01<br>Output generated: 23 3月 24 19:38:10<br>Copyright (c) 1999-2008 Analytic Technologies</p>
<h2 id="2-8-凝聚子群分析"><a href="#2-8-凝聚子群分析" class="headerlink" title="2.8 凝聚子群分析"></a>2.8 凝聚子群分析</h2><p>network->roles& positions ->structural ->concor</p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/image-20240323193930316.png" alt="image-20240323193930316"></p>
<h1 id="3-结论"><a href="#3-结论" class="headerlink" title="3 结论"></a>3 结论</h1><p>社交网络分析在灰度共生矩阵上的应用,反应了像素点之间的关联。从而可以得出图片中的痕迹是否明显。</p>
<h1 id="4-与自己方向相结合"><a href="#4-与自己方向相结合" class="headerlink" title="4 与自己方向相结合"></a>4 与自己方向相结合</h1><p>我的研究方向是视频深度伪造检测</p>
<p>本次提供的灰度共生数据,来源于以下图片</p>
<p><img src="C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20240325082027764.png" alt="image-20240325082027764"></p>
<p>倘若,再加以处理,例如:将真的图片中的人脸提取出来,再进行灰度共生矩阵处理,对其进行中心性分析等一系列社交网络分析。然后将所得的分析数据输入神经网络模型中,并重复输入不同的人脸图像,让模型进行学习。再将假图片的分析数据给训练后的模型进行评估。</p>
]]></content>
<categories>
<category>计算机</category>
<category>CV学习</category>
</categories>
</entry>
<entry>
<title>Hexo安装和配置next主题</title>
<url>/learn_blog/2024/03/22/%E5%AE%89%E8%A3%85Hexo%E5%92%8C%E9%85%8D%E7%BD%AEnext/</url>
<content><![CDATA[<h1 id="1-安装Hexo"><a href="#1-安装Hexo" class="headerlink" title="1.安装Hexo"></a>1.安装Hexo</h1><p>Hexo 依赖了 Node.js 和 Git,所以在安装 Hexo 之前必须确保安装了这两个工具.</p>
<h2 id="1-2-安装Node-js"><a href="#1-2-安装Node-js" class="headerlink" title="1.2 安装Node.js"></a>1.2 安装Node.js</h2><p>下载:<a href="https://link.zhihu.com/?target=https%3A//nodejs.org/en/download/">https://nodejs.org/en/download/</a></p>
<p>安装完</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">node --version</span><br></pre></td></tr></table></figure>
<h2 id="1-3-安装git"><a href="#1-3-安装git" class="headerlink" title="1.3 安装git"></a>1.3 安装git</h2><p>下载:<a href="https://link.zhihu.com/?target=https%3A//git-scm.com/downloads">https://git-scm.com/downloads</a></p>
<p>安装完</p>
<figure class="highlight ada"><table><tr><td class="code"><pre><span class="line">git <span class="comment">--version</span></span><br></pre></td></tr></table></figure>
<h2 id="1-4-安装Hexo"><a href="#1-4-安装Hexo" class="headerlink" title="1.4 安装Hexo"></a>1.4 安装Hexo</h2><p>选择6.3.0版本<a href="https://www.npmjs.com/package/hexo/v/6.3.0">hexo - npm (npmjs.com)</a></p>
<p>install hexo</p>
<figure class="highlight apache"><table><tr><td class="code"><pre><span class="line"><span class="attribute">npm</span> i hexo@<span class="number">6</span>.<span class="number">3</span>.<span class="number">0</span></span><br></pre></td></tr></table></figure>
<p>install 脚手架</p>
<figure class="highlight avrasm"><table><tr><td class="code"><pre><span class="line">npm install hexo-<span class="keyword">cli</span> -g</span><br></pre></td></tr></table></figure>
<p>在F盘根目录打开bash</p>
<figure class="highlight csharp"><table><tr><td class="code"><pre><span class="line">hexo <span class="keyword">init</span> blog</span><br></pre></td></tr></table></figure>
<p>开启服务</p>
<figure class="highlight sas"><table><tr><td class="code"><pre><span class="line">hexo c <span class="variable">&&</span> hexo g <span class="variable">&&</span> hexo s</span><br></pre></td></tr></table></figure>
<h2 id="1-5-配置next主题"><a href="#1-5-配置next主题" class="headerlink" title="1.5 配置next主题"></a>1.5 配置next主题</h2><h3 id="1-主题-Gemini"><a href="#1-主题-Gemini" class="headerlink" title="1. 主题(Gemini)"></a>1. 主题(Gemini)</h3><p><strong>主题配置文件</strong></p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"># Schemes</span><br><span class="line"># scheme: Muse</span><br><span class="line"># scheme: Mist</span><br><span class="line"># scheme: Pisces</span><br><span class="line">scheme: Gemini</span><br></pre></td></tr></table></figure>
<h3 id="2-配置menu"><a href="#2-配置menu" class="headerlink" title="2. 配置menu"></a>2. 配置menu</h3><p><strong>站点配置文件</strong></p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"># Site</span><br><span class="line">title: 秦越人的博客</span><br><span class="line">subtitle: <span class="string">'Practice Tests Truth'</span></span><br><span class="line">description: <span class="string">'Welcome to my world'</span></span><br><span class="line">keywords:</span><br><span class="line">author: Qinyueren</span><br><span class="line">language: zh-CN</span><br><span class="line">timezone: <span class="string">'Asia'</span></span><br></pre></td></tr></table></figure>
<p><strong>主题配置文件</strong></p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="selector-tag">menu</span>:</span><br><span class="line"> home: / || fa fa-home</span><br><span class="line"> about: /about/ || fa fa-user</span><br><span class="line"> tags: /tags/ || fa fa-tags</span><br><span class="line"> categories: /categories/ || fa fa-th</span><br><span class="line"> archives: /archives/ || fa fa-archive</span><br><span class="line"> #schedule: /schedule/ || fa fa-calendar</span><br><span class="line"> #sitemap: /sitemap.xml || fa fa-sitemap</span><br><span class="line"> #commonweal: /<span class="number">404</span>/ || fa fa-heartbeat</span><br><span class="line"></span><br><span class="line"># Enable / Disable menu icons / item badges.</span><br><span class="line">menu_settings:</span><br><span class="line"> icons: true</span><br><span class="line"> badges: false</span><br></pre></td></tr></table></figure>
<p><strong>样例</strong></p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/image-20240321175529789.png" alt="image-20240321175529789"></p>
<h3 id="3-配置看板娘"><a href="#3-配置看板娘" class="headerlink" title="3. 配置看板娘"></a>3. 配置看板娘</h3><p>安装插件</p>
<figure class="highlight cmake"><table><tr><td class="code"><pre><span class="line">npm <span class="keyword">install</span> -save hexo-helper-live2d</span><br></pre></td></tr></table></figure>
<p><strong>站点配置文件</strong></p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line">live2d:</span><br><span class="line"> enable: true</span><br><span class="line"> scriptFrom: local</span><br><span class="line"> pluginRootPath: live2dw/</span><br><span class="line"> pluginJsPath: lib/</span><br><span class="line"> pluginModelPath: assets/</span><br><span class="line"> tagMode: false</span><br><span class="line"> log: false</span><br><span class="line"> model:</span><br><span class="line"> use: live2d-widget-model-shizuku</span><br><span class="line"> display:</span><br><span class="line"> position: right</span><br><span class="line"> # width: <span class="number">150</span> # 大小根据模型结构自己调整合适的</span><br><span class="line"> # height: <span class="number">300</span></span><br><span class="line"> mobile:</span><br><span class="line"> show: true # 是否在手机端显示</span><br></pre></td></tr></table></figure>
<p>安装shizuku模型</p>
<figure class="highlight mipsasm"><table><tr><td class="code"><pre><span class="line">npm <span class="keyword">install </span>live2d-widget-model-<span class="keyword">shizuku </span>--save</span><br></pre></td></tr></table></figure>
<p><strong>样例</strong></p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/image-20240321180000858.png" alt="image-20240321180000858"></p>
<h3 id="4-更换博客背景"><a href="#4-更换博客背景" class="headerlink" title="4. 更换博客背景"></a>4. 更换博客背景</h3><p>把准备好的背景图放入 <code>themes\hexo-theme-next\source\images</code> 中</p>
<p>新建 <code>hexo/source/_data/styles.styl</code></p>
<figure class="highlight html"><table><tr><td class="code"><pre><span class="line">//背景图片设置</span><br><span class="line">body {</span><br><span class="line"> background-image: url(/images/background.jpg);</span><br><span class="line"> background-repeat: no-repeat;</span><br><span class="line"> background-attachment: fixed;</span><br><span class="line"> background-size: 100% 100%;</span><br><span class="line"> //调整透明度</span><br><span class="line"> opacity: 0.85;</span><br><span class="line"> //可选</span><br><span class="line"> +mobile(){</span><br><span class="line"> background-image: url(https://ziyuan.lruihao.cn/images/bg_cell.png);</span><br><span class="line"> background-size: cover;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h3 id="5-边框圆角"><a href="#5-边框圆角" class="headerlink" title="5. 边框圆角"></a>5. 边框圆角</h3><p>在之前新建的 <code>_data</code> 目录下新建 <code>variables.styl</code>,类似新建 <code>styles.styl</code>。打开 <code>variables.styl</code>,添加如下:</p>
<figure class="highlight gams"><table><tr><td class="code"><pre><span class="line"><span class="comment">// 圆角设置</span></span><br><span class="line"><span class="meta"><span class="keyword">$border</span>-radius-inner = 20px 20px 20px 20px;</span></span><br><span class="line"><span class="meta"><span class="keyword">$border</span>-radius = 20px;</span></span><br></pre></td></tr></table></figure>
<p>打开 custom_file_path 中 variable 的注释</p>
<figure class="highlight gams"><table><tr><td class="code"><pre><span class="line">custom_file_path:</span><br><span class="line"></span><br><span class="line"><span class="keyword">variable</span>: source/_data/<span class="keyword">variables</span>.styl</span><br></pre></td></tr></table></figure>
<h3 id="6-美化归档栏和分类栏"><a href="#6-美化归档栏和分类栏" class="headerlink" title="6. 美化归档栏和分类栏"></a>6. 美化归档栏和分类栏</h3><p>在<code>blog/themes/next/layout/_macro/</code>下新建文件<code>post-collapse.swig</code>并复制一下内容</p>
<figure class="highlight django"><table><tr><td class="code"><pre><span class="line"><span class="template-tag">{% <span class="name">macro</span> render(posts) %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"></span><span class="template-tag">{%- <span class="name">set</span> current_year = '1970' %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"></span><span class="template-tag">{%- <span class="name"><span class="name">for</span></span> post <span class="keyword">in</span> posts.toArray() %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-tag">{%- <span class="name">set</span> year = date(post.date, 'YYYY') %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-tag">{%- <span class="name"><span class="name">if</span></span> year !== current_year %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-tag">{%- <span class="name">set</span> current_year = year %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"collection-year"</span>></span></span></span><br><span class="line"><span class="language-xml"> <</span><span class="template-tag">{%- <span class="name"><span class="name">if</span></span> theme.seo %}</span><span class="language-xml">h2</span><span class="template-tag">{% <span class="name"><span class="name">else</span></span> %}</span><span class="language-xml">h1</span><span class="template-tag">{%- <span class="name"><span class="name">endif</span></span> %}</span><span class="language-xml"> class="collection-header"></span><span class="template-variable">{{ current_year }}</span><span class="language-xml"></</span><span class="template-tag">{%- <span class="name"><span class="name">if</span></span> theme.seo %}</span><span class="language-xml">h2</span><span class="template-tag">{% <span class="name"><span class="name">else</span></span> %}</span><span class="language-xml">h1</span><span class="template-tag">{%- <span class="name"><span class="name">endif</span></span> %}</span><span class="language-xml">></span></span><br><span class="line"><span class="language-xml"> <span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-tag">{%- <span class="name"><span class="name">endif</span></span> %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> <span class="tag"><<span class="name">article</span> <span class="attr">class</span>=<span class="string">"my-post post-type-</span></span></span><span class="template-variable">{{ post.type | default('normal') }}</span><span class="language-xml"><span class="tag"><span class="string">"</span> <span class="attr">itemscope</span> <span class="attr">itemtype</span>=<span class="string">"http://schema.org/Article"</span>></span></span></span><br><span class="line"><span class="language-xml"> <span class="tag"><<span class="name">header</span> <span class="attr">class</span>=<span class="string">"my-post-header"</span>></span></span></span><br><span class="line"><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"my-post-meta"</span>></span></span></span><br><span class="line"><span class="language-xml"> <span class="tag"><<span class="name">time</span> <span class="attr">class</span>=<span class="string">"my-post-time"</span> <span class="attr">itemprop</span>=<span class="string">"dateCreated"</span></span></span></span><br><span class="line"><span class="tag"><span class="language-xml"> <span class="attr">datetime</span>=<span class="string">"</span></span></span><span class="template-variable">{{ moment(post.date).format() }}</span><span class="language-xml"><span class="tag"><span class="string">"</span></span></span></span><br><span class="line"><span class="tag"><span class="language-xml"> <span class="attr">content</span>=<span class="string">"</span></span></span><span class="template-variable">{{ date(post.date, config.date_format) }}</span><span class="language-xml"><span class="tag"><span class="string">"</span>></span></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-variable">{{ date(post.date, 'MM-DD') }}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> <span class="tag"></<span class="name">time</span>></span></span></span><br><span class="line"><span class="language-xml"> <span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line"><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> <</span><span class="template-tag">{%- <span class="name"><span class="name">if</span></span> theme.seo %}</span><span class="language-xml">h3</span><span class="template-tag">{% <span class="name"><span class="name">else</span></span> %}</span><span class="language-xml">h2</span><span class="template-tag">{%- <span class="name"><span class="name">endif</span></span> %}</span><span class="language-xml"> class="my-post-title"></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-tag">{%- <span class="name"><span class="name">if</span></span> post.link %}</span><span class="comment">{# Link posts #}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> <span class="tag"><<span class="name">a</span> <span class="attr">class</span>=<span class="string">"my-post-title-link post-title-link-external"</span> <span class="attr">target</span>=<span class="string">"_blank"</span> <span class="attr">href</span>=<span class="string">"</span></span></span><span class="template-variable">{{ url_for(post.link) }}</span><span class="language-xml"><span class="tag"><span class="string">"</span> <span class="attr">itemprop</span>=<span class="string">"url"</span>></span></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-variable">{{ post.title or post.link }}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> <span class="tag"><<span class="name">i</span> <span class="attr">class</span>=<span class="string">"fa fa-external-link"</span>></span><span class="tag"></<span class="name">i</span>></span></span></span><br><span class="line"><span class="language-xml"> <span class="tag"></<span class="name">a</span>></span></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-tag">{% <span class="name"><span class="name">else</span></span> %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> <span class="tag"><<span class="name">a</span> <span class="attr">class</span>=<span class="string">"my-post-title-link"</span> <span class="attr">href</span>=<span class="string">"</span></span></span><span class="template-variable">{{ url_for(post.path) }}</span><span class="language-xml"><span class="tag"><span class="string">"</span> <span class="attr">itemprop</span>=<span class="string">"url"</span>></span></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-tag">{% <span class="name"><span class="name">if</span></span> post.type === 'picture' %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-variable">{{ post.content }}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-tag">{% <span class="name"><span class="name">else</span></span> %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> <span class="tag"><<span class="name">span</span> <span class="attr">itemprop</span>=<span class="string">"name"</span>></span></span><span class="template-variable">{{ post.title or __('post.untitled') }}</span><span class="language-xml"><span class="tag"></<span class="name">span</span>></span></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-tag">{% <span class="name"><span class="name">endif</span></span> %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> <span class="tag"></<span class="name">a</span>></span></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-tag">{%- <span class="name"><span class="name">endif</span></span> %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> </</span><span class="template-tag">{%- <span class="name"><span class="name">if</span></span> theme.seo %}</span><span class="language-xml">h3</span><span class="template-tag">{% <span class="name"><span class="name">else</span></span> %}</span><span class="language-xml">h2</span><span class="template-tag">{%- <span class="name"><span class="name">endif</span></span> %}</span><span class="language-xml">></span></span><br><span class="line"><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> <span class="tag"></<span class="name">header</span>></span></span></span><br><span class="line"><span class="language-xml"> <span class="tag"></<span class="name">article</span>></span></span></span><br><span class="line"><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"></span><span class="template-tag">{%- <span class="name"><span class="name">endfor</span></span> %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"></span><span class="template-tag">{% <span class="name">endmacro</span> %}</span></span><br></pre></td></tr></table></figure>
<p>复制下面内容,粘贴到你所用主题的<code>index.styl</code>后面</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="comment">/* 归档页样式 began */</span></span><br><span class="line"><span class="selector-class">.page-archive</span> <span class="selector-class">.archive-page-counter</span> {</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">18px</span>;</span><br><span class="line"> <span class="attribute">background-color</span>: <span class="number">#49b1f5</span>;</span><br><span class="line"> <span class="attribute">padding-left</span>: <span class="number">10px</span>;</span><br><span class="line"> <span class="attribute">padding-right</span>: <span class="number">10px</span>;</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">8px</span>;</span><br><span class="line"> <span class="attribute">color</span>: <span class="number">#fff</span>;</span><br><span class="line"> +mobile() {</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">16px</span>;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"><span class="selector-class">.my-post-time</span>{</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">11px</span>;</span><br><span class="line"> <span class="attribute">position</span>: absolute;</span><br><span class="line"> <span class="attribute">color</span>: <span class="number">#fff</span>;</span><br><span class="line"> <span class="attribute">background-color</span>: <span class="number">#49b1f5</span>;</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">5px</span>;</span><br><span class="line"> <span class="attribute">padding-left</span>: <span class="number">5px</span>;</span><br><span class="line"> <span class="attribute">padding-right</span>: <span class="number">5px</span>;</span><br><span class="line"> <span class="attribute">margin-left</span>: <span class="number">15px</span>;</span><br><span class="line">}</span><br><span class="line"><span class="selector-class">.mypost</span>{</span><br><span class="line"> <span class="attribute">position</span>: relative;</span><br><span class="line"> <span class="attribute">margin-bottom</span>: <span class="number">1rem</span>;</span><br><span class="line"> -webkit-<span class="attribute">transition</span>: all .<span class="number">2s</span> ease-in-out;</span><br><span class="line"> -moz-<span class="attribute">transition</span>: all .<span class="number">2s</span> ease-in-out;</span><br><span class="line"> -o-<span class="attribute">transition</span>: all .<span class="number">2s</span> ease-in-out;</span><br><span class="line"> -ms-<span class="attribute">transition</span>: all .<span class="number">2s</span> ease-in-out;</span><br><span class="line"> <span class="attribute">transition</span>: all .<span class="number">2s</span> ease-in-out;</span><br><span class="line">}</span><br><span class="line"><span class="selector-tag">a</span><span class="selector-class">.my-post-title-link</span><span class="selector-pseudo">:before</span>{</span><br><span class="line"> <span class="attribute">top</span>: <span class="number">10px</span>;</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">18px</span>;</span><br><span class="line"> <span class="attribute">height</span>: <span class="number">18px</span>;</span><br><span class="line"> <span class="attribute">content</span>: <span class="string">"📚"</span>;</span><br><span class="line"> <span class="attribute">margin-right</span>: <span class="number">5px</span>;</span><br><span class="line"> <span class="attribute">font</span>: normal normal normal <span class="number">14px</span>/<span class="number">1</span> FontAwesome;</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">15px</span>;</span><br><span class="line"> <span class="attribute">line-height</span>: <span class="number">18px</span>;</span><br><span class="line">}</span><br><span class="line"><span class="selector-class">.my-post</span><span class="selector-pseudo">:hover</span>{</span><br><span class="line"> <span class="attribute">transform</span>: <span class="built_in">scale</span>(<span class="number">1.1</span>);</span><br><span class="line"> <span class="attribute">box-shadow</span>: <span class="number">10px</span> <span class="number">10px</span> <span class="number">15px</span> <span class="number">2px</span> <span class="built_in">rgba</span>(<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,.<span class="number">12</span>), <span class="number">0</span> <span class="number">0</span> <span class="number">6px</span> <span class="number">0</span> <span class="built_in">rgba</span>(<span class="number">104</span>, <span class="number">104</span>, <span class="number">105</span>, <span class="number">0.1</span>);</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">30px</span>;</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">400px</span>;</span><br><span class="line"> <span class="attribute">padding</span>: <span class="number">1px</span> <span class="number">10px</span>;</span><br><span class="line"> <span class="attribute">margin-left</span>: <span class="number">25px</span>;</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">16px</span>;</span><br><span class="line"> <span class="attribute">transition-duration</span>: <span class="number">0.15s</span>;</span><br><span class="line"> +mobile(){</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">260px</span>;</span><br><span class="line"> <span class="attribute">margin-left</span>: <span class="number">18px</span>;</span><br><span class="line"> }</span><br><span class="line"> //<span class="attribute">display</span>:flex;</span><br><span class="line">}</span><br><span class="line"><span class="selector-tag">a</span><span class="selector-class">.my-post-title-link</span>{</span><br><span class="line"> <span class="attribute">text-decoration</span>: none;</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">15px</span>;</span><br><span class="line"> <span class="attribute">font-weight</span>: <span class="number">400</span>;</span><br><span class="line"> +mobile() {</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">14px</span>;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"><span class="selector-class">.my-post-title</span>{</span><br><span class="line"> <span class="attribute">display</span>: block;</span><br><span class="line"> <span class="attribute">margin-left</span>: <span class="number">4.5rem</span>;</span><br><span class="line"> <span class="attribute">color</span>: <span class="number">#4c4948</span>;</span><br><span class="line"> <span class="attribute">text-decoration</span>: none;</span><br><span class="line"> <span class="attribute">font-size</span>: .<span class="number">8rem</span>;</span><br><span class="line"> <span class="attribute">cursor</span>: pointer;</span><br><span class="line"> +mobile() {</span><br><span class="line"> //<span class="attribute">margin-left</span>: <span class="number">4rem</span>;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"><span class="selector-class">.my-post-header</span>{</span><br><span class="line"> <span class="attribute">position</span>: top;</span><br><span class="line"> <span class="attribute">margin-bottom</span>: <span class="number">1rem</span>;</span><br><span class="line"> -webkit-<span class="attribute">transition</span>: all .<span class="number">2s</span> ease-in-out;</span><br><span class="line"> -moz-<span class="attribute">transition</span>: all .<span class="number">2s</span> ease-in-out;</span><br><span class="line"> -o-<span class="attribute">transition</span>: all .<span class="number">2s</span> ease-in-out;</span><br><span class="line"> -ms-<span class="attribute">transition</span>: all .<span class="number">2s</span> ease-in-out;</span><br><span class="line"> <span class="attribute">transition</span>: all .<span class="number">2s</span> ease-in-out;</span><br><span class="line">}</span><br><span class="line">//<span class="selector-class">.my-post-title-link</span>{</span><br><span class="line">// <span class="attribute">font-size</span>: <span class="number">16px</span>;</span><br><span class="line">// <span class="attribute">font-weight</span>: <span class="number">500</span>;</span><br><span class="line">//}</span><br><span class="line"><span class="selector-class">.my-post-meta</span>{</span><br><span class="line"> <span class="attribute">position</span>: absolute;</span><br><span class="line"> <span class="attribute">color</span>: <span class="number">#99a9bf</span>;</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">80px</span>;</span><br><span class="line"> <span class="attribute">color</span>: <span class="number">#114142</span>;</span><br><span class="line">}</span><br><span class="line"><span class="selector-tag">div</span><span class="selector-class">.post-block</span><span class="selector-class">.tag</span> <span class="selector-class">.collection-title</span> <span class="selector-tag">h2</span> {</span><br><span class="line"> <span class="attribute">border-width</span>: <span class="number">1px</span>;</span><br><span class="line"> <span class="attribute">border-style</span>: solid;</span><br><span class="line"> <span class="attribute">border-color</span>: <span class="number">#3f3f3f</span>;</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">20px</span>;</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">22px</span>;</span><br><span class="line"> <span class="attribute">background-color</span>: <span class="number">#b4e8fa</span>;</span><br><span class="line"> <span class="attribute">padding</span>: <span class="number">2px</span> <span class="number">15px</span>;</span><br><span class="line"> <span class="attribute">letter-spacing</span>: <span class="number">1.5px</span>;</span><br><span class="line"> <span class="attribute">box-sizing</span>: border-box;</span><br><span class="line"> <span class="attribute">color</span>: <span class="number">#3f3f3f</span>;</span><br><span class="line"> <span class="attribute">display</span>: inline-block;</span><br><span class="line"> <span class="attribute">margin</span>: <span class="number">10px</span> <span class="number">0</span> <span class="number">10px</span>;</span><br><span class="line"> <span class="attribute">text-align</span>: center;</span><br><span class="line"> +mobile(){</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">18px</span>;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"><span class="comment">/* 归档页样式 end */</span></span><br></pre></td></tr></table></figure>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="comment">/* 分类页样式 began */</span></span><br><span class="line"><span class="selector-class">.category-list-link</span><span class="selector-pseudo">:hover</span>{</span><br><span class="line"> <span class="attribute">transform</span>: <span class="built_in">scale</span>(<span class="number">1.1</span>);</span><br><span class="line"> <span class="attribute">box-shadow</span>: <span class="number">10px</span> <span class="number">10px</span> <span class="number">15px</span> <span class="number">2px</span> <span class="built_in">rgba</span>(<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,.<span class="number">12</span>), <span class="number">0</span> <span class="number">0</span> <span class="number">6px</span> <span class="number">0</span> <span class="built_in">rgba</span>(<span class="number">104</span>, <span class="number">104</span>, <span class="number">105</span>, <span class="number">0.1</span>);</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">15px</span>;</span><br><span class="line"> <span class="attribute">padding</span>: <span class="number">6px</span> <span class="number">16px</span>;</span><br><span class="line"> <span class="attribute">margin-left</span>: <span class="number">0px</span>;</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">16px</span>;</span><br><span class="line"> <span class="attribute">transition-duration</span>: <span class="number">0.15s</span>;</span><br><span class="line"> //<span class="attribute">display</span>:flex;</span><br><span class="line">}</span><br><span class="line"><span class="selector-tag">a</span><span class="selector-class">.category-list-link</span><span class="selector-pseudo">:before</span>{</span><br><span class="line"> <span class="attribute">top</span>: <span class="number">10px</span>;</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">18px</span>;</span><br><span class="line"> <span class="attribute">height</span>: <span class="number">18px</span>;</span><br><span class="line"> <span class="attribute">content</span>: <span class="string">"📚"</span>;</span><br><span class="line"> <span class="attribute">margin-right</span>: <span class="number">5px</span>;</span><br><span class="line"> <span class="attribute">font</span>: normal normal normal <span class="number">14px</span>/<span class="number">1</span> FontAwesome;</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">15px</span>;</span><br><span class="line"> <span class="attribute">line-height</span>: <span class="number">18px</span>;</span><br><span class="line">}</span><br><span class="line"><span class="comment">/* 分类页样式 end */</span></span><br></pre></td></tr></table></figure>
<h3 id="7-代码块Mac风"><a href="#7-代码块Mac风" class="headerlink" title="7. 代码块Mac风"></a>7. 代码块Mac风</h3><p><strong>站点配置</strong></p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="attr">highlight:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span> <span class="comment">#是否开启代码高亮</span></span><br><span class="line"> <span class="attr">line_number:</span> <span class="literal">true</span> <span class="comment">#是否增加代码行号</span></span><br><span class="line"> <span class="attr">auto_detect:</span> <span class="literal">true</span> <span class="comment">#自动判断代码语言</span></span><br><span class="line"> <span class="attr">tab_replace:</span> <span class="string">""</span></span><br><span class="line"> <span class="attr">wrap:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">hljs:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">prismjs:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">preprocess:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">line_number:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">tab_replace:</span> <span class="string">""</span></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p><strong>主题配置</strong></p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="attr">codeblock:</span></span><br><span class="line"> <span class="comment"># Code Highlight theme</span></span><br><span class="line"> <span class="comment"># All available themes: https://theme-next.js.org/highlight/</span></span><br><span class="line"> <span class="attr">theme:</span></span><br><span class="line"> <span class="comment"># light: github-dark</span></span><br><span class="line"> <span class="attr">light:</span> <span class="string">github-dark</span></span><br><span class="line"> <span class="attr">dark:</span> <span class="string">github-dark</span></span><br><span class="line"> <span class="attr">prism:</span></span><br><span class="line"> <span class="attr">light:</span> <span class="string">prism</span></span><br><span class="line"> <span class="attr">dark:</span> <span class="string">prism-dark</span></span><br><span class="line"> <span class="comment"># Add copy button on codeblock</span></span><br><span class="line"> <span class="attr">copy_button:</span> <span class="comment"># 一键复制</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment"># Available values: default | flat | mac</span></span><br><span class="line"> <span class="attr">style:</span> <span class="string">mac</span></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h3 id="8-设置阅读全文"><a href="#8-设置阅读全文" class="headerlink" title="8. 设置阅读全文"></a>8. 设置阅读全文</h3><p>执行</p>
<figure class="highlight ada"><table><tr><td class="code"><pre><span class="line">npm install hexo-excerpt <span class="comment">--save</span></span><br></pre></td></tr></table></figure>
<p><strong>站点</strong></p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="attr">excerpt:</span> <span class="comment"># 一定要顶格写,注意格式</span></span><br><span class="line"> <span class="attr">depth:</span> <span class="number">5</span> <span class="comment"># 他的大小就是全文阅读预览长度设置</span></span><br><span class="line"> <span class="attr">excerpt_excludes:</span> []</span><br><span class="line"> <span class="attr">more_excludes:</span> []</span><br><span class="line"> <span class="attr">hideWholePostExcerpts:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure>
<p><strong>主题</strong></p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># Automatically excerpt description in homepage as preamble text.</span></span><br><span class="line"><span class="attr">excerpt_description:</span> <span class="literal">true</span> <span class="comment"># 一般默认为true</span></span><br></pre></td></tr></table></figure>
<h3 id="9-增加文章字数统计和阅读时长"><a href="#9-增加文章字数统计和阅读时长" class="headerlink" title="9. 增加文章字数统计和阅读时长"></a>9. 增加文章字数统计和阅读时长</h3><p>执行</p>
<figure class="highlight applescript"><table><tr><td class="code"><pre><span class="line">npm install hexo-<span class="built_in">word</span>-counter</span><br></pre></td></tr></table></figure>
<p><strong>站点</strong></p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># 增加文章字数统计及阅读时长功能</span></span><br><span class="line"><span class="attr">symbols_count_time:</span></span><br><span class="line"> <span class="attr">symbols:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">time:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">total_symbols:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">total_time:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">exclude_codeblock:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">wpm:</span> <span class="number">275</span></span><br><span class="line"> <span class="attr">suffix:</span> <span class="string">"mins."</span></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h3 id="10-文章结束标志"><a href="#10-文章结束标志" class="headerlink" title="10. 文章结束标志"></a>10. 文章结束标志</h3><p>在路径 <code>\themes\next\layout\_macro</code> 中新建 <code>passage-end-tag.swig</code> 文件,并添加以下内容</p>
<figure class="highlight django"><table><tr><td class="code"><pre><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span>></span></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-tag">{% <span class="name"><span class="name">if</span></span> not is_index %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> <span class="tag"><<span class="name">div</span> <span class="attr">style</span>=<span class="string">"text-align:center;color: #ccc;font-size:14px;"</span>></span>-------------已经到底啦!<span class="tag"><<span class="name">i</span> <span class="attr">class</span>=<span class="string">"fa fa-paw"</span>></span><span class="tag"></<span class="name">i</span>></span>-------------<span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-tag">{% <span class="name"><span class="name">endif</span></span> %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br></pre></td></tr></table></figure>
<p>打开 <code>\themes\next\layout\_macro\post.njk</code> 文件,在post-body 之后(END POST BODY),post-footer 之前添加以下代码:</p>
<figure class="highlight django"><table><tr><td class="code"><pre><span class="line"><span class="language-xml"><span class="tag"><<span class="name">div</span>></span></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-tag">{% <span class="name"><span class="name">if</span></span> not is_index %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-tag">{% <span class="name"><span class="name">include</span></span> 'passage-end-tag.swig' %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"> </span><span class="template-tag">{% <span class="name"><span class="name">endif</span></span> %}</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml"><span class="tag"></<span class="name">div</span>></span></span></span><br><span class="line"><span class="language-xml"></span></span><br></pre></td></tr></table></figure>
<h3 id="11-分类设置"><a href="#11-分类设置" class="headerlink" title="11. 分类设置"></a>11. 分类设置</h3><p>在文章上头</p>
<p><strong>单层</strong></p>
<figure class="highlight ldif"><table><tr><td class="code"><pre><span class="line"><span class="attribute">categories</span>:</span><br><span class="line"><span class="literal">-</span> Hexo 博客</span><br></pre></td></tr></table></figure>
<p><strong>父子</strong></p>
<figure class="highlight ldif"><table><tr><td class="code"><pre><span class="line"><span class="attribute">categories</span>:</span><br><span class="line"><span class="literal">-</span> 前端</span><br><span class="line"><span class="literal">-</span> 笔记</span><br></pre></td></tr></table></figure>
<p><strong>并列</strong></p>
<figure class="highlight ldif"><table><tr><td class="code"><pre><span class="line"><span class="attribute">categories</span>:</span><br><span class="line"><span class="literal">-</span> [后端]</span><br><span class="line"><span class="literal">-</span> [笔记]</span><br></pre></td></tr></table></figure>
<p><strong>同一父类不同子类</strong></p>
<figure class="highlight ldif"><table><tr><td class="code"><pre><span class="line"><span class="attribute">categories</span>:</span><br><span class="line"><span class="literal">-</span> [学习,html]</span><br><span class="line"><span class="literal">-</span> [学习,http]</span><br></pre></td></tr></table></figure>
<h3 id="12-分类问题"><a href="#12-分类问题" class="headerlink" title="12. 分类问题"></a>12. 分类问题</h3><p>原因:</p>
<p>原因是因为我把_config.yml中的时区timezone改成了2020-5-1(笑死)</p>
<p>解决办法:</p>
<p>把timezone改成 Asia/Shanghai 就好了。</p>
<h3 id="13-删除分类"><a href="#13-删除分类" class="headerlink" title="13. 删除分类"></a>13. 删除分类</h3><figure class="highlight stata"><table><tr><td class="code"><pre><span class="line"><span class="keyword">rm</span> -rf <span class="keyword">db</span>.json</span><br><span class="line"></span><br><span class="line">hexo clean</span><br><span class="line"></span><br><span class="line">hexo <span class="keyword">g</span></span><br><span class="line"></span><br><span class="line">hexo s</span><br></pre></td></tr></table></figure>
<h3 id="14-侧边栏滚动条"><a href="#14-侧边栏滚动条" class="headerlink" title="14. 侧边栏滚动条"></a>14. 侧边栏滚动条</h3><figure class="highlight asciidoc"><table><tr><td class="code"><pre><span class="line">/<span class="strong">*更好的侧边滚动条*</span>/</span><br><span class="line">::-webkit-scrollbar {</span><br><span class="line"><span class="code"> width: 10px;</span></span><br><span class="line"><span class="code"> height: 10px;</span></span><br><span class="line">}</span><br><span class="line">::-webkit-scrollbar-button {</span><br><span class="line"><span class="code"> width: 0;</span></span><br><span class="line"><span class="code"> height: 0;</span></span><br><span class="line">}</span><br><span class="line"><span class="meta">::-webkit-scrollbar-button:start:increment,::-webkit-scrollbar-button:end:decrement</span> {</span><br><span class="line"><span class="code"> display: none;</span></span><br><span class="line">}</span><br><span class="line">::-webkit-scrollbar-corner {</span><br><span class="line"><span class="code"> display: block;</span></span><br><span class="line">}</span><br><span class="line">::-webkit-scrollbar-thumb {</span><br><span class="line"><span class="code"> border-radius: 8px;</span></span><br><span class="line"><span class="code"> background-color: rgba(0,0,0,.2);</span></span><br><span class="line">}</span><br><span class="line"><span class="meta">::-webkit-scrollbar-thumb:hover</span> {</span><br><span class="line"><span class="code"> border-radius: 8px;</span></span><br><span class="line"><span class="code"> background-color: rgba(0,0,0,.5);</span></span><br><span class="line">}</span><br><span class="line"><span class="meta">::-webkit-scrollbar-track,::-webkit-scrollbar-thumb</span> {</span><br><span class="line"><span class="code"> border-right: 1px solid transparent;</span></span><br><span class="line"><span class="code"> border-left: 1px solid transparent;</span></span><br><span class="line">}</span><br><span class="line"><span class="meta">::-webkit-scrollbar-track:hover</span> {</span><br><span class="line"><span class="code"> background-color: rgba(0,0,0,.15);</span></span><br><span class="line">}</span><br><span class="line"><span class="meta">::-webkit-scrollbar-button:start</span> {</span><br><span class="line"><span class="code"> width: 10px;</span></span><br><span class="line"><span class="code"> height: 10px;</span></span><br><span class="line"><span class="code"> /*background: url(../images/scrollbar_arrow.png) no-repeat 0 0;*/ /*可以添加滚动条样式*/</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h3 id="15-回到顶部按钮"><a href="#15-回到顶部按钮" class="headerlink" title="15. 回到顶部按钮"></a>15. 回到顶部按钮</h3><ul>
<li>在themes/*/_config.yml中搜索back2top,将enable属性的false改为true即可:</li>
</ul>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="attr">back2top:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment"># Back to top in sidebar.</span></span><br><span class="line"> <span class="attr">sidebar:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment"># Scroll percent label in b2t button.</span></span><br><span class="line"> <span class="attr">scrollpercent:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure>
<h3 id="16-阅读进度条"><a href="#16-阅读进度条" class="headerlink" title="16. 阅读进度条"></a>16. 阅读进度条</h3><ul>
<li>在themes/*/_config.yml中搜索reading_progress,修改相关信息:</li>
</ul>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># Reading progress bar</span></span><br><span class="line"><span class="attr">reading_progress:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment"># Available values: top | bottom</span></span><br><span class="line"> <span class="attr">position:</span> <span class="string">top</span> <span class="comment"># 进度条在页面中显示的位置:顶部/底部</span></span><br><span class="line"> <span class="attr">color:</span> <span class="string">"#37c6c0"</span> <span class="comment"># 进度条颜色</span></span><br><span class="line"> <span class="attr">height:</span> <span class="string">3px</span> <span class="comment"># 进度条宽度</span></span><br></pre></td></tr></table></figure>
<h1 id="2-git-配置"><a href="#2-git-配置" class="headerlink" title="2. git 配置"></a>2. git 配置</h1><p><strong>站点文件</strong></p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># Site</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">秦越人的博客</span></span><br><span class="line"><span class="attr">subtitle:</span> <span class="string">'Practice Tests Truth'</span></span><br><span class="line"><span class="attr">description:</span> <span class="string">'Welcome to my world'</span></span><br><span class="line"><span class="attr">keywords:</span></span><br><span class="line"><span class="attr">author:</span> <span class="string">Qinyueren</span></span><br><span class="line"><span class="attr">language:</span> <span class="string">zh-CN</span></span><br><span class="line"><span class="attr">timezone:</span> <span class="string">'Asia/Shanghai'</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># URL</span></span><br><span class="line"><span class="comment">## Set your site url here. For example, if you use GitHub Page, set url as 'https://username.github.io/project'</span></span><br><span class="line"><span class="attr">url:</span> <span class="string">http://qinyueren.gitee.io</span></span><br><span class="line"><span class="attr">root:</span> <span class="string">/learn_blog/</span></span><br><span class="line"><span class="attr">permalink:</span> <span class="string">:year/:month/:day/:title/</span></span><br><span class="line"><span class="attr">permalink_defaults:</span></span><br><span class="line"><span class="attr">pretty_urls:</span></span><br><span class="line"> <span class="attr">trailing_index:</span> <span class="literal">true</span> <span class="comment"># Set to false to remove trailing 'index.html' from permalinks</span></span><br><span class="line"> <span class="attr">trailing_html:</span> <span class="literal">true</span> <span class="comment"># Set to false to remove trailing '.html' from permalinks</span></span><br><span class="line"> </span><br><span class="line"><span class="attr">deploy:</span></span><br><span class="line"> <span class="attr">type:</span> <span class="string">'git'</span></span><br><span class="line"> <span class="attr">repo:</span> <span class="string">https://gitee.com/qinyueren/learn_blog.git</span></span><br><span class="line"> <span class="attr">branch:</span> <span class="string">master</span></span><br><span class="line"> </span><br><span class="line"><span class="comment"># Extensions</span></span><br><span class="line"><span class="comment">## Plugins: https://hexo.io/plugins/</span></span><br><span class="line"><span class="comment">## Themes: https://hexo.io/themes/</span></span><br><span class="line"><span class="attr">theme:</span> <span class="string">hexo-theme-next</span></span><br></pre></td></tr></table></figure>
<h1 id="3-设置图床"><a href="#3-设置图床" class="headerlink" title="3. 设置图床"></a>3. 设置图床</h1><h2 id="3-1-安装Picgo"><a href="#3-1-安装Picgo" class="headerlink" title="3.1 安装Picgo"></a>3.1 安装Picgo</h2><p>下载picgo安装包</p>
<p><a href="https://[github](https://so.csdn.net/so/search?q=github&spm=1001.2101.3001.7020).com/Molunerfinn/PicGo/releases">https://[github](https://so.csdn.net/so/search?q=github&spm=1001.2101.3001.7020).com/Molunerfinn/PicGo/releases</a></p>
<p>在picgo界面</p>
<p>安装gitee-uploader插件</p>
<h2 id="3-2-新建图床库"><a href="#3-2-新建图床库" class="headerlink" title="3.2 新建图床库"></a>3.2 新建图床库</h2><p>gitee新建仓库</p>
<ul>
<li>输入仓库名称</li>
<li>仓库设置公开</li>
<li>勾选使用Readme文件初始化仓库(会自动插件master分支</li>
</ul>
<h2 id="3-3-配置picgo"><a href="#3-3-配置picgo" class="headerlink" title="3.3 配置picgo"></a>3.3 配置picgo</h2><ul>
<li>repo: 用户名/仓库名</li>
<li>branch: master</li>
<li>token: 私人令牌</li>
</ul>
<h2 id="3-4-typroa配置Picgo"><a href="#3-4-typroa配置Picgo" class="headerlink" title="3.4 typroa配置Picgo"></a>3.4 typroa配置Picgo</h2><p>文件–>偏好设置–>图像-》上传图片,对网络位置应用上述规则</p>
<p>设置picgo路径,并验证</p>
]]></content>
<categories>
<category>计算机</category>
<category>网站搭建</category>
</categories>
</entry>
<entry>
<title>法系机制</title>
<url>/learn_blog/2024/03/22/%E6%B3%95%E7%B3%BB%E6%9C%BA%E5%88%B6/</url>
<content><![CDATA[<h1 id="1-门派的分灵机制"><a href="#1-门派的分灵机制" class="headerlink" title="1. 门派的分灵机制"></a>1. 门派的分灵机制</h1><h2 id="1-1-作用目标影响分灵系数"><a href="#1-1-作用目标影响分灵系数" class="headerlink" title="1.1 作用目标影响分灵系数"></a>1.1 作用目标影响分灵系数</h2><ol>
<li>当作用目标≤3时,分灵系数为$1-N\times0.1$,其中N为目标人数</li>
<li>当作用目标=4时,初始目标(3个)分灵系数为70%,额外目标分灵系数为60%</li>
<li>当作用目标≥5时,初始目标(3个)分灵系数为70%,额外目标分灵系数为$0.7-N\times0.05$</li>
<li>分灵系数最低为0.5,最高为1</li>
</ol>
<h2 id="1-2-魔王神木分灵系数"><a href="#1-2-魔王神木分灵系数" class="headerlink" title="1.2 魔王神木分灵系数"></a>1.2 魔王神木分灵系数</h2><p>根据实际输出的数据来看,秒5分灵系数从1~5分别是</p>
<div class="table-container">
<table>
<thead>
<tr>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
</tr>
</thead>
<tbody>
<tr>
<td>0.9</td>
<td>0.8</td>
<td>0.7</td>
<td>0.6</td>
<td>0.6</td>
</tr>
</tbody>
</table>
</div>
<h2 id="1-3-龙宫化生寺分灵系数"><a href="#1-3-龙宫化生寺分灵系数" class="headerlink" title="1.3 龙宫化生寺分灵系数"></a>1.3 龙宫化生寺分灵系数</h2><p>根据实际输出的数据来看,秒7分灵系数从1~7分别是</p>
<div class="table-container">
<table>
<thead>
<tr>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
</tr>
</thead>
<tbody>
<tr>
<td>0.9</td>
<td>0.8</td>
<td>0.7</td>
<td>0.6</td>
<td>0.5</td>
<td>0.5</td>
<td>0.5</td>
</tr>
</tbody>
</table>
</div>
<h2 id="1-4-天雷灌注天宫"><a href="#1-4-天雷灌注天宫" class="headerlink" title="1.4 天雷灌注天宫"></a>1.4 天雷灌注天宫</h2><p>待整理</p>
<h2 id="1-5-五雷咒方寸"><a href="#1-5-五雷咒方寸" class="headerlink" title="1.5 五雷咒方寸"></a>1.5 五雷咒方寸</h2><p>待整理</p>
<h2 id="1-6-女魃墓"><a href="#1-6-女魃墓" class="headerlink" title="1.6 女魃墓"></a>1.6 女魃墓</h2><p>待整理</p>
<h1 id="2-灵饰法伤与法结对比"><a href="#2-灵饰法伤与法结对比" class="headerlink" title="2. 灵饰法伤与法结对比"></a>2. 灵饰法伤与法结对比</h1><p>法术计算公式:</p>
<script type="math/tex; mode=display">
法术伤害=1\times分灵系数\times(1+魔心卡+修炼加成+天阵加成)</script><h2 id="2-1-无暴击下"><a href="#2-1-无暴击下" class="headerlink" title="2.1 无暴击下"></a>2.1 无暴击下</h2><div class="table-container">
<table>
<thead>
<tr>
<th>1法伤</th>
<th>分灵</th>
<th>修炼</th>
<th>天阵</th>
<th>低魔心</th>
<th>结果</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td>0.9</td>
<td>20%</td>
<td>25%</td>
<td>10%</td>
<td>1.395</td>
</tr>
<tr>
<td></td>
<td>0.8</td>
<td>20%</td>
<td>25%</td>
<td>10%</td>
<td>1.24</td>
</tr>
<tr>
<td></td>
<td>0.7</td>
<td>20%</td>
<td>25%</td>
<td>10%</td>
<td>1.085</td>
</tr>
<tr>
<td></td>
<td>0.6</td>
<td>20%</td>
<td>25%</td>
<td>10%</td>
<td>0.93</td>
</tr>
<tr>
<td></td>
<td>0.5</td>
<td>20%</td>
<td>25%</td>
<td>10%</td>
<td>0.775</td>
</tr>
<tr>
<td><strong>1法结</strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>1.0</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<ul>
<li>灵饰4段下,初始值为10<ul>
<li>法伤10+4*4=26</li>
<li>法结10+3*4=22</li>
</ul>
</li>
</ul>
<div class="table-container">
<table>
<thead>
<tr>
<th>法伤26</th>
<th>分灵</th>
<th>结果</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td>0.9</td>
<td>36.27</td>
</tr>
<tr>
<td></td>
<td>0.8</td>
<td>32.24</td>
</tr>
<tr>
<td></td>
<td>0.7</td>
<td>28.21</td>
</tr>
<tr>
<td></td>
<td>0.6</td>
<td>24.18</td>
</tr>
<tr>
<td></td>
<td>0.5</td>
<td>20.15</td>
</tr>
<tr>
<td><strong>法结22</strong></td>
<td></td>
<td>22</td>
</tr>
</tbody>
</table>
</div>
<h2 id="2-2-暴击下"><a href="#2-2-暴击下" class="headerlink" title="2.2 暴击下"></a>2.2 暴击下</h2><div class="table-container">
<table>
<thead>
<tr>
<th>1法伤</th>
<th>分灵</th>
<th>修炼</th>
<th>天阵</th>
<th>低魔心</th>
<th>结果</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td>0.9</td>
<td>20%</td>
<td>25%</td>
<td>10%</td>
<td>2.79</td>
</tr>
<tr>
<td></td>
<td>0.8</td>
<td>20%</td>
<td>25%</td>
<td>10%</td>
<td>2.48</td>
</tr>
<tr>
<td></td>
<td>0.7</td>
<td>20%</td>
<td>25%</td>
<td>10%</td>
<td>2.17</td>
</tr>
<tr>
<td></td>
<td>0.6</td>
<td>20%</td>
<td>25%</td>
<td>10%</td>
<td>1.86</td>
</tr>
<tr>
<td></td>
<td>0.5</td>
<td>20%</td>
<td>25%</td>
<td>10%</td>
<td>1.5</td>
</tr>
<tr>
<td><strong>1法结</strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>2.0</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<ul>
<li>灵饰4段下,初始值为10<ul>
<li>法伤10+4*4=26</li>
<li>法结10+3*4=22</li>
</ul>
</li>
</ul>
<div class="table-container">
<table>
<thead>
<tr>
<th>法伤26</th>
<th>分灵</th>
<th>结果</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td>0.9</td>
<td>72.54</td>
</tr>
<tr>
<td></td>
<td>0.8</td>
<td>64.48</td>
</tr>
<tr>
<td></td>
<td>0.7</td>
<td>56.42</td>
</tr>
<tr>
<td></td>
<td>0.6</td>
<td>48.36</td>
</tr>
<tr>
<td></td>
<td>0.5</td>
<td>39</td>
</tr>
<tr>
<td><strong>法结22</strong></td>
<td></td>
<td>44</td>
</tr>
</tbody>
</table>
</div>
]]></content>
<categories>
<category>游戏</category>
<category>梦幻西游</category>
</categories>
</entry>
<entry>
<title>Deepfake Detection All model 一览</title>
<url>/learn_blog/2024/03/22/%E6%89%80%E6%9C%89%E6%A8%A1%E5%9E%8B%E4%B8%80%E8%A7%88/</url>
<content><![CDATA[<h1 id="Deep-Learing-深度学习"><a href="#Deep-Learing-深度学习" class="headerlink" title="Deep Learing(深度学习)"></a>Deep Learing(深度学习)</h1><h2 id="CNN-卷积神经网络"><a href="#CNN-卷积神经网络" class="headerlink" title="CNN(卷积神经网络)"></a>CNN(卷积神经网络)</h2><ul>
<li>XceptionNet</li>
<li>VGG</li>
<li>ResNet</li>
<li>GoogleNet</li>
<li>InceptionV3</li>
<li>MoblieNet</li>
<li>IncepResNet</li>
<li>EfficientNet</li>
<li>DenseNet</li>
<li>HRNet</li>
<li>SuppressNet</li>
<li>StatsNet</li>
<li>DEL</li>
</ul>
<h2 id="RNN-循环神经网络"><a href="#RNN-循环神经网络" class="headerlink" title="RNN(循环神经网络)"></a>RNN(循环神经网络)</h2><ul>
<li>LSTM</li>
<li>FaceNet</li>
<li>Bio Directional RNN</li>
<li>RCNN(区域卷积神经网络)</li>
<li>Faster RCNN</li>
<li>Long-term RCNN</li>
<li>HMN</li>
<li>MTCNN(多任务级联CNN)</li>
<li>MSCNN(多尺度时间CNN)</li>
</ul>
<h1 id="Machine-Learning-机器学习"><a href="#Machine-Learning-机器学习" class="headerlink" title="Machine Learning(机器学习)"></a>Machine Learning(机器学习)</h1><ul>
<li>SVM(支持向量机)</li>
<li>LR(逻辑回归)</li>
<li>MLP(多层感知器神经网络)</li>
<li>k-MN(k表示聚类)</li>
<li>KNN(k-最近邻居)</li>
<li>MIL</li>
<li>DA(判别分析)</li>
<li>NB(朴素贝叶斯)</li>
<li>RF</li>
<li>DT(决策树)</li>
<li>BOOST<ul>
<li>XGB</li>
<li>AdaBoost</li>
</ul>
</li>
</ul>
<h1 id="Statistical"><a href="#Statistical" class="headerlink" title="Statistical"></a>Statistical</h1><ul>
<li>EM(期望最大化)</li>
<li>CRA(协同关系分析)</li>
<li>EA</li>
<li>PI</li>
<li>WM</li>
<li>KLD</li>
<li>TVD</li>
<li>JSD</li>
</ul>
<h1 id="BC区块链"><a href="#BC区块链" class="headerlink" title="BC区块链"></a>BC区块链</h1><p>ETH(以太坊区块链)</p>
<h1 id="Feature"><a href="#Feature" class="headerlink" title="Feature"></a>Feature</h1><ul>
<li>SA:特殊伪像,</li>
<li>VA:视觉伪像,</li>
<li>BA:生物伪影,</li>
<li>FL:人脸标志,</li>
<li>STC:时空一致性,</li>
<li>TEX:纹理,</li>
<li>FDA:频域分析,</li>
<li>LS:潜在特征,</li>
<li>GAN:基于生成对抗性网络的特征,</li>
<li>MES:介观特征,</li>
<li>IFC:帧内不一致,</li>
<li>CPRNU:Constrastive and photo-responsed PRNU pattern,</li>
<li>IMG:图像元数据,增强和隐写分析,其他:不在通用列表中的不同特征</li>
</ul>
<h1 id="Dataset"><a href="#Dataset" class="headerlink" title="Dataset"></a>Dataset</h1><ul>
<li>FF:FaceForensics,</li>
<li>DFD:Deepfake Detection,</li>
<li>CELEB-A:Deepfake Forensics V1,</li>
<li>CELEB-DF:DDeepFake-Forensics V2,</li>
<li>DFDC:Depfake Detection Chalange,</li>
<li>DF-TIMIT:Depfake-TIMIT,</li>
<li>DF-1.0:DeperForensics-1.0,</li>
<li>WDF:Wild Deepfake,</li>
<li>SMFW:SwapMe和FaceSwap,</li>
<li>DFS:Deep Fakes,</li>
<li>FFD:野生中的假脸,</li>
<li>FE:FakeET,</li>
<li>FS:换脸器,</li>
<li>DF:DepFake,</li>
<li>SFD:换脸检测,</li>
<li>UADFV:不一致的头部姿势,</li>
<li>MANFA:篡改的脸,</li>
<li>其他:作者的自定义数据集</li>
</ul>
<h1 id="Focus"><a href="#Focus" class="headerlink" title="Focus"></a>Focus</h1><p>DMF:数字媒体取证,FM:面部操纵</p>
]]></content>
<categories>
<category>计算机</category>
<category>CV学习</category>
</categories>
</entry>
<entry>
<title>清点资源</title>
<url>/learn_blog/2024/03/22/%E6%B8%85%E7%82%B9%E8%B5%84%E6%BA%90/</url>
<content><![CDATA[<h1 id="清点资源"><a href="#清点资源" class="headerlink" title="清点资源"></a>清点资源</h1><h2 id="人物情况"><a href="#人物情况" class="headerlink" title="人物情况"></a>人物情况</h2><h3 id="等级与经验"><a href="#等级与经验" class="headerlink" title="等级与经验"></a>等级与经验</h3><p>总经验25 E</p>
<p>等级:144</p>
<p>目前经验4000万</p>
<h3 id="师门技能"><a href="#师门技能" class="headerlink" title="师门技能"></a>师门技能</h3><p>4个130级,3个99级</p>
<h3 id="人物修炼"><a href="#人物修炼" class="headerlink" title="人物修炼"></a>人物修炼</h3><p>3修12</p>
<h3 id="潜能果"><a href="#潜能果" class="headerlink" title="潜能果"></a>潜能果</h3><p>29个</p>
<h2 id="宝宝情况"><a href="#宝宝情况" class="headerlink" title="宝宝情况"></a>宝宝情况</h2><h3 id="宠修"><a href="#宠修" class="headerlink" title="宠修"></a>宠修</h3><p>三修4</p>
<h2 id="每月产出储备金"><a href="#每月产出储备金" class="headerlink" title="每月产出储备金"></a>每月产出储备金</h2><p>庭院500</p>
<p>牧场500</p>
<p>押镖420</p>
<p>师徒300</p>
<p>口袋1200</p>
<p>总计 500+500+420+300+1200=2920 万</p>
<h2 id="每周产出经验"><a href="#每周产出经验" class="headerlink" title="每周产出经验"></a>每周产出经验</h2><p>1-5星期:1000*5=5000万</p>
<p>6-7星期:2000+1000=3000万</p>
<p>共 8000万</p>
<h1 id="145未飞升"><a href="#145未飞升" class="headerlink" title="145未飞升"></a>145未飞升</h1><h2 id="师门技能-1"><a href="#师门技能-1" class="headerlink" title="师门技能"></a>师门技能</h2><p>2个99级升至130:1414*2=2828万</p>
<p>2个130级升至140:826*2=1632万(可以飞升后处理)</p>
<p>共 2828+1632=4460万</p>
<h2 id="人物修炼-1"><a href="#人物修炼-1" class="headerlink" title="人物修炼"></a>人物修炼</h2><p>3修12至3修13</p>
<p>438*2=876万</p>
<p>657万(师徒抵消一半)328</p>
<p>共876+328=1204万</p>
<p>帮贡达到1950</p>
<h2 id="辅助技能"><a href="#辅助技能" class="headerlink" title="辅助技能"></a>辅助技能</h2><p>家具75升至100:2700-2200</p>
<h2 id="潜能果-1"><a href="#潜能果-1" class="headerlink" title="潜能果"></a>潜能果</h2><p>转门派扣除:26个</p>
<h2 id="计算时间"><a href="#计算时间" class="headerlink" title="计算时间"></a>计算时间</h2><p>最低储备金:2828+1204=2952万(一个月时间)</p>
<p>一个月获得经验4*8000=3.5 E,则潜能果29个吃到50个</p>
<p>潜能果还剩下24个</p>
<h1 id="飞升130-140疲软期"><a href="#飞升130-140疲软期" class="headerlink" title="飞升130-140疲软期"></a>飞升130-140疲软期</h1><h2 id="人物经验"><a href="#人物经验" class="headerlink" title="人物经验"></a>人物经验</h2><p>1.6E 2周时间</p>
<h1 id="飞升140-145"><a href="#飞升140-145" class="headerlink" title="飞升140-145"></a>飞升140-145</h1><h2 id="140升145"><a href="#140升145" class="headerlink" title="140升145"></a>140升145</h2><p>共1E经验</p>
<h2 id="145级囤经验"><a href="#145级囤经验" class="headerlink" title="145级囤经验"></a>145级囤经验</h2><p>145升146需要4363万</p>
<p>师门上限为4.3E经验</p>
<h2 id="所需时间"><a href="#所需时间" class="headerlink" title="所需时间"></a>所需时间</h2><p>1+4.3=5.3E经验,需要2个月时间</p>
<h2 id="人物修炼-2"><a href="#人物修炼-2" class="headerlink" title="人物修炼"></a>人物修炼</h2><p>2个月,储备金为2902*2=5804万</p>
<p>双防12-15需1498*2=2996万</p>
<p>法修13-16需要2535万</p>
<h1 id="冲击155级"><a href="#冲击155级" class="headerlink" title="冲击155级"></a>冲击155级</h1><h2 id="145-152级"><a href="#145-152级" class="headerlink" title="145-152级"></a>145-152级</h2><p>消耗经验3.8E,还剩下4.3-3.8=0.5E</p>
<h2 id="152-155级"><a href="#152-155级" class="headerlink" title="152-155级"></a>152-155级</h2><p>消耗经验2.4E,一个月时间</p>
<h2 id="人修"><a href="#人修" class="headerlink" title="人修"></a>人修</h2><p>双抗15-17 需要 1332*2=2664万</p>
<p>法修16-17 需要 1053/2=527万</p>
<p>三修17 51修,已经达到渡劫人修要求</p>
<h1 id="冲击渡劫"><a href="#冲击渡劫" class="headerlink" title="冲击渡劫"></a>冲击渡劫</h1><h2 id="宠修-1"><a href="#宠修-1" class="headerlink" title="宠修"></a>宠修</h2><h3 id="不跑宠环和吃果子"><a href="#不跑宠环和吃果子" class="headerlink" title="不跑宠环和吃果子"></a>不跑宠环和吃果子</h3><p>每个月6000经验,需要4个月,达到4修10</p>
<h2 id="4个月储备金"><a href="#4个月储备金" class="headerlink" title="4个月储备金"></a>4个月储备金</h2><p>4*3000=1.2E</p>
<h2 id="师门技能-2"><a href="#师门技能-2" class="headerlink" title="师门技能"></a>师门技能</h2><p>3个130升至150,2个140升至150</p>
<p>1910*3+2168=7898万,还剩下4100万</p>
<h1 id="渡劫159收尾"><a href="#渡劫159收尾" class="headerlink" title="渡劫159收尾"></a>渡劫159收尾</h1><h2 id="155-159"><a href="#155-159" class="headerlink" title="155-159"></a>155-159</h2><p>3.5E,共一个月</p>
<h2 id="人修-1"><a href="#人修-1" class="headerlink" title="人修"></a>人修</h2><p>三修18需要 778*2+1167/2=2140万</p>
<h1 id="总计时间"><a href="#总计时间" class="headerlink" title="总计时间"></a>总计时间</h1><p>三个月到达155,四个月渡劫,收尾一个月</p>
<p>共8个月</p>
<p>暑期前155级,过年前渡劫成功</p>
]]></content>
<categories>
<category>游戏</category>
<category>梦幻西游</category>
</categories>
</entry>
<entry>
<title>SelfBlendedImages论文精读</title>
<url>/learn_blog/2024/03/24/SelfBlendedImages%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB/</url>
<content><![CDATA[<h1 id="1-论文解读"><a href="#1-论文解读" class="headerlink" title="1. 论文解读"></a>1. 论文解读</h1><h1 id="2-代码运行"><a href="#2-代码运行" class="headerlink" title="2. 代码运行"></a>2. 代码运行</h1><h2 id="2-1-环境"><a href="#2-1-环境" class="headerlink" title="2.1 环境"></a>2.1 环境</h2><p>下载 <code>requirements.txt</code></p>
<p>并运行</p>
<p><code>!pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple</code></p>
<p><code>!pip install efficientnet-pytorch==0.7.1 -i https://pypi.tuna.tsinghua.edu.cn/simple</code></p>
<p><code>!pip install retinaface-pytorch==0.0.7 -i https://pypi.tuna.tsinghua.edu.cn/simple</code></p>
<p><code>!pip install dlib -i https://pypi.tuna.tsinghua.edu.cn/simple</code></p>
<p><code>!pip install imutils -i https://pypi.tuna.tsinghua.edu.cn/simple</code></p>
<p><code>!pip install numpy==1.21.4 -i https://pypi.tuna.tsinghua.edu.cn/simple</code></p>
<h2 id="2-2-数据集"><a href="#2-2-数据集" class="headerlink" title="2.2 数据集"></a>2.2 数据集</h2><p><strong>Celeb-DF-v2</strong>数据集</p>
<p>将其存放在<code>./data/</code>文件夹中</p>
<p>并且数据的文件树为以下结构</p>
<figure class="highlight smali"><table><tr><td class="code"><pre><span class="line"><span class="keyword">.</span></span><br><span class="line">└── data</span><br><span class="line"> └── Celeb-DF-v2</span><br><span class="line"> ├── Celeb-real</span><br><span class="line"> │ └── videos</span><br><span class="line"> │ └── *.mp4</span><br><span class="line"> ├── Celeb-synthesis</span><br><span class="line"> │ └── videos</span><br><span class="line"> │ └── *.mp4</span><br><span class="line"> ├── Youtube-real</span><br><span class="line"> │ └── videos</span><br><span class="line"> │ └── *.mp4</span><br><span class="line"> └── List_of_testing_videos.txt</span><br></pre></td></tr></table></figure>
<blockquote>
<p>这里有个坑,下载过的celeb数据集,路径是没有videos的,你要自己创建。反正要严格按照上面的路径来</p>
</blockquote>
<p><strong>FaceForensics++</strong>数据集</p>
<p>将其存放在<code>./data/</code>文件夹中</p>
<p>并且数据的文件树为以下结构</p>
<figure class="highlight mipsasm"><table><tr><td class="code"><pre><span class="line">.</span><br><span class="line">└── data</span><br><span class="line"> └── FaceForensics++</span><br><span class="line"> ├── <span class="keyword">original_sequences</span></span><br><span class="line"><span class="keyword"></span> │ └── youtube</span><br><span class="line"> │ └── raw</span><br><span class="line"> │ └── videos</span><br><span class="line"> │ └── *.mp4</span><br><span class="line"> ├── train.<span class="keyword">json</span></span><br><span class="line"><span class="keyword"></span> ├── val.<span class="keyword">json</span></span><br><span class="line"><span class="keyword"></span> └── test.<span class="keyword">json</span></span><br></pre></td></tr></table></figure>
<blockquote>
<p>这个数据集一个original都要100G这么大,每个月的VPN流量伤不起啊</p>
</blockquote>
<h2 id="2-3-预训练模型"><a href="#2-3-预训练模型" class="headerlink" title="2.3 预训练模型"></a>2.3 预训练模型</h2><p>在作者的谷歌云盘中下载2个预训练模型:FF-raw and FF-c23.</p>
<p>并将其存放在 <code>./weights/</code> 文件中</p>
<h2 id="2-4-测试"><a href="#2-4-测试" class="headerlink" title="2.4 测试"></a>2.4 测试</h2><p><strong>测试Celeb-DF-v2数据集</strong></p>
<figure class="highlight diff"><table><tr><td class="code"><pre><span class="line">CUDA_VISIBLE_DEVICES=* python3 src/inference/inference_dataset.py \</span><br><span class="line"><span class="deletion">-w weights/FFraw.tar \</span></span><br><span class="line"><span class="deletion">-d CDF</span></span><br></pre></td></tr></table></figure>
<p><strong>测试视频</strong></p>
<figure class="highlight livescript"><table><tr><td class="code"><pre><span class="line">CUDA_VISIBLE_DEVICES=* python3 src/inference/inference_video.py <span class="string">\</span></span><br><span class="line">-w weights/FFraw.tar <span class="string">\</span></span><br><span class="line">-i /path/<span class="keyword">to</span>/video.mp4</span><br></pre></td></tr></table></figure>
<p><strong>测试图片</strong></p>
<figure class="highlight livescript"><table><tr><td class="code"><pre><span class="line">CUDA_VISIBLE_DEVICES=* python3 src/inference/inference_image.py <span class="string">\</span></span><br><span class="line">-w weights/FFraw.tar <span class="string">\</span></span><br><span class="line">-i /path/<span class="keyword">to</span>/image.png</span><br></pre></td></tr></table></figure>
<h2 id="2-5-训练模型"><a href="#2-5-训练模型" class="headerlink" title="2.5 训练模型"></a>2.5 训练模型</h2><ol>
<li><p>下载<code>landmarks.dat</code></p>
<p><a href="https://github.com/codeniko/shape_predictor_81_face_landmarks">here</a> 将文件存放在 <code>./src/preprocess/</code> 文件中</p>
</li>
<li><p>运行两个人脸提取的代码,两个都要运行,不然训练不了,<code>crop_dlib_ff.py</code>和<code>crop_retina_ff.py</code></p>
</li>
</ol>
<figure class="highlight vim"><table><tr><td class="code"><pre><span class="line"><span class="keyword">python3</span> src/preprocess/crop_dlib_ff.<span class="keyword">py</span> -d Original</span><br><span class="line">CUDA_VISIBLE_DEVICES=* <span class="keyword">python3</span> src/preprocess/crop_retina_ff.<span class="keyword">py</span> -d Original</span><br></pre></td></tr></table></figure>
<ol>
<li>特征点参数代码可以下载也可以不下载</li>
</ol>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="built_in">mkdir</span> src/utils/library</span><br><span class="line">git <span class="built_in">clone</span> https://github.com/AlgoHunt/Face-Xray.git src/utils/library</span><br></pre></td></tr></table></figure>
<ol>
<li>运行训练代码</li>
</ol>
<figure class="highlight avrasm"><table><tr><td class="code"><pre><span class="line">CUDA_VISIBLE_DEVICES=* python3 src/train_sbi.py \</span><br><span class="line">src/configs/<span class="keyword">sbi</span>/base.json \</span><br><span class="line">-n <span class="keyword">sbi</span></span><br></pre></td></tr></table></figure>
<p>运行完 5 个权重文件将会保存在 <code>./output/</code> 文件中</p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/image-20240324184108970.png" alt="image-20240324184108970"></p>
<h1 id="3-代码解读"><a href="#3-代码解读" class="headerlink" title="3. 代码解读"></a>3. 代码解读</h1><h2 id="dilb人脸检测"><a href="#dilb人脸检测" class="headerlink" title="dilb人脸检测"></a>dilb人脸检测</h2><p><strong>可以当做模版使用</strong></p>
<p>这里只分析参数即可,具体代码直接套用,不需要深度理解</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">if</span> __name__==<span class="string">'__main__'</span>:</span><br><span class="line"> parser=argparse.ArgumentParser()</span><br><span class="line"> <span class="comment">#数据集</span></span><br><span class="line"> parser.add_argument(<span class="string">'-d'</span>,dest=<span class="string">'dataset'</span>,choices=[<span class="string">'DeepFakeDetection_original'</span>,<span class="string">'DeepFakeDetection'</span>,<span class="string">'FaceShifter'</span>,<span class="string">'Face2Face'</span>,<span class="string">'Deepfakes'</span>,<span class="string">'FaceSwap'</span>,<span class="string">'NeuralTextures'</span>,<span class="string">'Original'</span>,<span class="string">'Celeb-real'</span>,<span class="string">'Celeb-synthesis'</span>,<span class="string">'YouTube-real'</span>,<span class="string">'DFDC'</span>,<span class="string">'DFDCP'</span>])</span><br><span class="line"> </span><br><span class="line"> <span class="comment">#三种压缩系数</span></span><br><span class="line"> parser.add_argument(<span class="string">'-c'</span>,dest=<span class="string">'comp'</span>,choices=[<span class="string">'raw'</span>,<span class="string">'c23'</span>,<span class="string">'c40'</span>],default=<span class="string">'raw'</span>)</span><br><span class="line"> </span><br><span class="line"> <span class="comment">#抽帧数</span></span><br><span class="line"> parser.add_argument(<span class="string">'-n'</span>,dest=<span class="string">'num_frames'</span>,<span class="built_in">type</span>=<span class="built_in">int</span>,default=<span class="number">32</span>)</span><br><span class="line"> args=parser.parse_args()</span><br><span class="line"> </span><br><span class="line"> <span class="comment"># 数据路径,这里的{}加入的是压缩系数</span></span><br><span class="line"> <span class="keyword">if</span> args.dataset==<span class="string">'Original'</span>: dataset_path=<span class="string">'/home/jovyan/work/SelfBlendedImages/data/FaceForensics++/original_sequences/youtube/{}/'</span>.<span class="built_in">format</span>(args.comp)</span><br><span class="line"> <span class="keyword">elif</span> args.dataset==<span class="string">'DeepFakeDetection_original'</span>:</span><br><span class="line"> dataset_path=<span class="string">'data/FaceForensics++/original_sequences/actors/{}/'</span>.<span class="built_in">format</span>(args.comp)</span><br><span class="line"> <span class="keyword">elif</span> args.dataset <span class="keyword">in</span> [<span class="string">'DeepFakeDetection'</span>,<span class="string">'FaceShifter'</span>,<span class="string">'Face2Face'</span>,<span class="string">'Deepfakes'</span>,<span class="string">'FaceSwap'</span>,<span class="string">'NeuralTextures'</span>]:</span><br><span class="line"> dataset_path=<span class="string">'data/FaceForensics++/manipulated_sequences/{}/{}/'</span>.<span class="built_in">format</span>(args.dataset,args.comp)</span><br><span class="line"> <span class="keyword">elif</span> args.dataset <span class="keyword">in</span> [<span class="string">'Celeb-real'</span>,<span class="string">'Celeb-synthesis'</span>,<span class="string">'YouTube-real'</span>]:</span><br><span class="line"> dataset_path=<span class="string">'data/Celeb-DF-v2/{}/'</span>.<span class="built_in">format</span>(args.dataset)</span><br><span class="line"> <span class="keyword">elif</span> args.dataset <span class="keyword">in</span> [<span class="string">'DFDC'</span>]:</span><br><span class="line"> dataset_path=<span class="string">'data/{}/'</span>.<span class="built_in">format</span>(args.dataset)</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">raise</span> NotImplementedError</span><br><span class="line"></span><br><span class="line"> face_detector = dlib.get_frontal_face_detector()</span><br><span class="line"> <span class="comment">#预测器的路径,需要下载</span></span><br><span class="line"> predictor_path = <span class="string">'/home/jovyan/work/SelfBlendedImages/src/preprocess/shape_predictor_81_face_landmarks.dat'</span></span><br><span class="line"> face_predictor = dlib.shape_predictor(predictor_path)</span><br><span class="line"> </span><br><span class="line"> <span class="comment">#视频路径</span></span><br><span class="line"> movies_path=dataset_path+<span class="string">'videos/'</span></span><br><span class="line"></span><br><span class="line"> <span class="comment">#寻找以mp4后缀的文件名,并对齐排序</span></span><br><span class="line"> movies_path_list=<span class="built_in">sorted</span>(glob(movies_path+<span class="string">'*.mp4'</span>))</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"{} : videos are exist in {}"</span>.<span class="built_in">format</span>(<span class="built_in">len</span>(movies_path_list),args.dataset))</span><br><span class="line"></span><br><span class="line"> <span class="comment">#用来记录进度条</span></span><br><span class="line"> n_sample=<span class="built_in">len</span>(movies_path_list)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> tqdm(<span class="built_in">range</span>(n_sample)):</span><br><span class="line"> <span class="comment">#文件路径改成 frames 下</span></span><br><span class="line"> folder_path=movies_path_list[i].replace(<span class="string">'videos/'</span>,<span class="string">'frames/'</span>).replace(<span class="string">'.mp4'</span>,<span class="string">'/'</span>)</span><br><span class="line"> <span class="comment">#并将参数输入 facecrop 函数</span></span><br><span class="line"> facecrop(movies_path_list[i],save_path=dataset_path,num_frames=args.num_frames,face_predictor=face_predictor,face_detector=face_detector)</span><br></pre></td></tr></table></figure>
<h2 id="retina人脸检测"><a href="#retina人脸检测" class="headerlink" title="retina人脸检测"></a>retina人脸检测</h2><p><strong>可以当做模版使用</strong></p>
<p>这里只分析参数即可,具体代码直接套用,不需要深度理解</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">if</span> __name__==<span class="string">'__main__'</span>:</span><br><span class="line"> parser=argparse.ArgumentParser()</span><br><span class="line"> </span><br><span class="line"> parser.add_argument(<span class="string">'-d'</span>,dest=<span class="string">'dataset'</span>,choices=[<span class="string">'DeepFakeDetection_original'</span>,<span class="string">'DeepFakeDetection'</span>,<span class="string">'FaceShifter'</span>,<span class="string">'Face2Face'</span>,<span class="string">'Deepfakes'</span>,<span class="string">'FaceSwap'</span>,<span class="string">'NeuralTextures'</span>,<span class="string">'Original'</span>,<span class="string">'Celeb-real'</span>,<span class="string">'Celeb-synthesis'</span>,<span class="string">'YouTube-real'</span>,<span class="string">'DFDC'</span>,<span class="string">'DFDCP'</span>])</span><br><span class="line"> </span><br><span class="line"> parser.add_argument(<span class="string">'-c'</span>,dest=<span class="string">'comp'</span>,choices=[<span class="string">'raw'</span>,<span class="string">'c23'</span>,<span class="string">'c40'</span>],default=<span class="string">'raw'</span>)</span><br><span class="line"> parser.add_argument(<span class="string">'-n'</span>,dest=<span class="string">'num_frames'</span>,<span class="built_in">type</span>=<span class="built_in">int</span>,default=<span class="number">32</span>)</span><br><span class="line"> args=parser.parse_args()</span><br><span class="line"> <span class="keyword">if</span> args.dataset==<span class="string">'Original'</span>:</span><br><span class="line"> dataset_path=<span class="string">'/home/jovyan/work/SelfBlendedImages/data/FaceForensics++/original_sequences/youtube/{}/'</span>.<span class="built_in">format</span>(args.comp)</span><br><span class="line"> <span class="keyword">elif</span> args.dataset==<span class="string">'DeepFakeDetection_original'</span>:</span><br><span class="line"> dataset_path=<span class="string">'/home/jovyan/work/SelfBlendedImages/data/FaceForensics++/original_sequences/actors/{}/'</span>.<span class="built_in">format</span>(args.comp)</span><br><span class="line"> <span class="keyword">elif</span> args.dataset <span class="keyword">in</span> [<span class="string">'DeepFakeDetection'</span>,<span class="string">'FaceShifter'</span>,<span class="string">'Face2Face'</span>,<span class="string">'Deepfakes'</span>,<span class="string">'FaceSwap'</span>,<span class="string">'NeuralTextures'</span>]:</span><br><span class="line"> dataset_path=<span class="string">'data/FaceForensics++/manipulated_sequences/{}/{}/'</span>.<span class="built_in">format</span>(args.dataset,args.comp)</span><br><span class="line"> <span class="keyword">elif</span> args.dataset <span class="keyword">in</span> [<span class="string">'Celeb-real'</span>,<span class="string">'Celeb-synthesis'</span>,<span class="string">'YouTube-real'</span>]:</span><br><span class="line"> dataset_path=<span class="string">'data/Celeb-DF-v2/{}/'</span>.<span class="built_in">format</span>(args.dataset)</span><br><span class="line"> <span class="keyword">elif</span> args.dataset <span class="keyword">in</span> [<span class="string">'DFDC'</span>,<span class="string">'DFDCVal'</span>]:</span><br><span class="line"> dataset_path=<span class="string">'data/{}/'</span>.<span class="built_in">format</span>(args.dataset)</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">raise</span> NotImplementedError</span><br><span class="line"> </span><br><span class="line"> <span class="comment">#设备是cuda</span></span><br><span class="line"> device=torch.device(<span class="string">'cuda'</span>)</span><br><span class="line"> <span class="comment">#获取模型 resnet () 可以试试更换其他模型</span></span><br><span class="line"> model = get_model(<span class="string">"resnet50_2020-07-20"</span>, max_size=<span class="number">2048</span>,device=device)</span><br><span class="line"> model.<span class="built_in">eval</span>()</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> movies_path=dataset_path+<span class="string">'videos/'</span></span><br><span class="line"></span><br><span class="line"> movies_path_list=<span class="built_in">sorted</span>(glob(movies_path+<span class="string">'*.mp4'</span>))</span><br><span class="line"> </span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"{} : videos are exist in {}"</span>.<span class="built_in">format</span>(<span class="built_in">len</span>(movies_path_list),args.dataset))</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> n_sample=<span class="built_in">len</span>(movies_path_list)</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> tqdm(<span class="built_in">range</span>(n_sample)):</span><br><span class="line"> folder_path=movies_path_list[i].replace(<span class="string">'videos/'</span>,<span class="string">'frames/'</span>).replace(<span class="string">'.mp4'</span>,<span class="string">'/'</span>)</span><br><span class="line"> <span class="keyword">if</span> <span class="built_in">len</span>(glob(folder_path.replace(<span class="string">'/frames/'</span>,<span class="string">'/retina/'</span>)+<span class="string">'*.npy'</span>))<args.num_frames:</span><br><span class="line"> facecrop(model,movies_path_list[i],save_path=dataset_path,num_frames=args.num_frames)</span><br></pre></td></tr></table></figure>
<h2 id="sbi-自混合图像"><a href="#sbi-自混合图像" class="headerlink" title="sbi 自混合图像"></a>sbi 自混合图像</h2><figure class="highlight py"><table><tr><td class="code"><pre><span class="line"><span class="comment"># 随机种子模版</span></span><br><span class="line">seed=<span class="number">10</span> </span><br><span class="line">random.seed(seed) </span><br><span class="line">torch.manual_seed(seed) </span><br><span class="line">np.random.seed(seed) </span><br><span class="line">torch.cuda.manual_seed(seed)</span><br><span class="line"></span><br><span class="line"><span class="comment"># cuda后端设置 模版</span></span><br><span class="line">torch.backends.cudnn.deterministic = <span class="literal">True</span> </span><br><span class="line">torch.backends.cudnn.benchmark = <span class="literal">False</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#图像大小调整为256x256。</span></span><br><span class="line">image_dataset=SBI_Dataset(phase=<span class="string">'test'</span>,image_size=<span class="number">256</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 数据加载模版</span></span><br><span class="line">batch_size=<span class="number">64</span> </span><br><span class="line">dataloader = torch.utils.data.DataLoader(image_dataset, </span><br><span class="line"> batch_size=batch_size, </span><br><span class="line"> <span class="comment">#启用数据打乱</span></span><br><span class="line"> shuffle=<span class="literal">True</span>, </span><br><span class="line"> collate_fn=image_dataset.collate_fn, </span><br><span class="line"> <span class="comment">#数据加载将在主进程中同步执行,不使用额外的进程。</span></span><br><span class="line"> num_workers=<span class="number">0</span>, </span><br><span class="line"> worker_init_fn=image_dataset.worker_init_fn </span><br><span class="line"> )</span><br><span class="line"><span class="comment"># 获取数据</span></span><br><span class="line">data_iter=<span class="built_in">iter</span>(dataloader) </span><br><span class="line">data=<span class="built_in">next</span>(data_iter)</span><br><span class="line"></span><br><span class="line"><span class="comment">#处理图像数据</span></span><br><span class="line">img=data[<span class="string">'img'</span>] </span><br><span class="line"><span class="comment">#view函数用于重新调整张量的形状。这里,我们将图像数据重新调整为(-1, 3, 256, 256)的形状,其中-1表示自动计算该维度的大小,3表示图像有3个通道(RGB),256x256是图像的尺寸。</span></span><br><span class="line">img=img.view((-<span class="number">1</span>,<span class="number">3</span>,<span class="number">256</span>,<span class="number">256</span>))</span><br><span class="line"></span><br><span class="line"><span class="comment">#图像像素值应在0到1之间,并且不进行归一化。</span></span><br><span class="line">utils.save_image(img, <span class="string">'loader.png'</span>, nrow=batch_size, normalize=<span class="literal">False</span>, <span class="built_in">range</span>=(<span class="number">0</span>, <span class="number">1</span>))</span><br></pre></td></tr></table></figure>
<h2 id="train-入口"><a href="#train-入口" class="headerlink" title="train 入口"></a>train 入口</h2><figure class="highlight py"><table><tr><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">main</span>(<span class="params">args</span>):</span><br><span class="line"> cfg=load_json(args.config)</span><br><span class="line"></span><br><span class="line"> seed=<span class="number">5</span></span><br><span class="line"> random.seed(seed)</span><br><span class="line"> torch.manual_seed(seed)</span><br><span class="line"> np.random.seed(seed)</span><br><span class="line"> torch.cuda.manual_seed(seed)</span><br><span class="line"> torch.backends.cudnn.deterministic = <span class="literal">True</span></span><br><span class="line"> torch.backends.cudnn.benchmark = <span class="literal">False</span></span><br><span class="line"></span><br><span class="line"> device = torch.device(<span class="string">'cuda'</span>)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> image_size=cfg[<span class="string">'image_size'</span>]</span><br><span class="line"> batch_size=cfg[<span class="string">'batch_size'</span>]</span><br><span class="line"> train_dataset=SBI_Dataset(phase=<span class="string">'train'</span>,image_size=image_size)</span><br><span class="line"> val_dataset=SBI_Dataset(phase=<span class="string">'val'</span>,image_size=image_size)</span><br><span class="line"> </span><br><span class="line"> train_loader=torch.utils.data.DataLoader(train_dataset,</span><br><span class="line"> batch_size=batch_size//<span class="number">2</span>,</span><br><span class="line"> shuffle=<span class="literal">True</span>,</span><br><span class="line"> collate_fn=train_dataset.collate_fn,</span><br><span class="line"> num_workers=<span class="number">4</span>,</span><br><span class="line"> pin_memory=<span class="literal">True</span>,</span><br><span class="line"> drop_last=<span class="literal">True</span>,</span><br><span class="line"> worker_init_fn=train_dataset.worker_init_fn</span><br><span class="line"> )</span><br><span class="line"> val_loader=torch.utils.data.DataLoader(val_dataset,</span><br><span class="line"> batch_size=batch_size,</span><br><span class="line"> shuffle=<span class="literal">False</span>,</span><br><span class="line"> collate_fn=val_dataset.collate_fn,</span><br><span class="line"> num_workers=<span class="number">4</span>,</span><br><span class="line"> pin_memory=<span class="literal">True</span>,</span><br><span class="line"> worker_init_fn=val_dataset.worker_init_fn</span><br><span class="line"> )</span><br><span class="line"> </span><br><span class="line"> model=Detector()</span><br><span class="line"> </span><br><span class="line"> model=model.to(<span class="string">'cuda'</span>)</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> <span class="comment"># 用来记录</span></span><br><span class="line"> iter_loss=[]</span><br><span class="line"> train_losses=[]</span><br><span class="line"> test_losses=[]</span><br><span class="line"> train_accs=[]</span><br><span class="line"> test_accs=[]</span><br><span class="line"> val_accs=[]</span><br><span class="line"> val_losses=[]</span><br><span class="line"> n_epoch=cfg[<span class="string">'epoch'</span>]</span><br><span class="line"> lr_scheduler=LinearDecayLR(model.optimizer, n_epoch, <span class="built_in">int</span>(n_epoch/<span class="number">4</span>*<span class="number">3</span>))</span><br><span class="line"> last_loss=<span class="number">99999</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> now=datetime.now()</span><br><span class="line"> </span><br><span class="line"> <span class="comment"># 输出路径,其中还包含添加的参数名,以及日期</span></span><br><span class="line"> save_path=<span class="string">'output/{}_'</span>.<span class="built_in">format</span>(args.session_name)+now.strftime(os.path.splitext(os.path.basename(args.config))[<span class="number">0</span>])+<span class="string">'_'</span>+now.strftime(<span class="string">"%m_%d_%H_%M_%S"</span>)+<span class="string">'/'</span></span><br><span class="line"> </span><br><span class="line"> <span class="comment">#创建输出权重文件</span></span><br><span class="line"> os.mkdir(save_path)</span><br><span class="line"> os.mkdir(save_path+<span class="string">'weights/'</span>)</span><br><span class="line"> os.mkdir(save_path+<span class="string">'logs/'</span>)</span><br><span class="line"> logger = log(path=save_path+<span class="string">"logs/"</span>, file=<span class="string">"losses.logs"</span>)</span><br><span class="line"></span><br><span class="line"> criterion=nn.CrossEntropyLoss()</span><br><span class="line"></span><br><span class="line"> <span class="comment"># 每轮都要初始化,很好的模版</span></span><br><span class="line"> last_auc=<span class="number">0</span></span><br><span class="line"> last_val_auc=<span class="number">0</span></span><br><span class="line"> weight_dict={}</span><br><span class="line"> n_weight=<span class="number">5</span></span><br><span class="line"> <span class="keyword">for</span> epoch <span class="keyword">in</span> <span class="built_in">range</span>(n_epoch):</span><br><span class="line"> np.random.seed(seed + epoch)</span><br><span class="line"> train_loss=<span class="number">0.</span></span><br><span class="line"> train_acc=<span class="number">0.</span></span><br><span class="line"> model.train(mode=<span class="literal">True</span>)</span><br><span class="line"> <span class="keyword">for</span> step,data <span class="keyword">in</span> <span class="built_in">enumerate</span>(tqdm(train_loader)):</span><br><span class="line"> img=data[<span class="string">'img'</span>].to(device, non_blocking=<span class="literal">True</span>).<span class="built_in">float</span>()</span><br><span class="line"> target=data[<span class="string">'label'</span>].to(device, non_blocking=<span class="literal">True</span>).long()</span><br><span class="line"> output=model.training_step(img, target)</span><br><span class="line"> loss=criterion(output,target)</span><br><span class="line"> loss_value=loss.item()</span><br><span class="line"> iter_loss.append(loss_value)</span><br><span class="line"> train_loss+=loss_value</span><br><span class="line"> acc=compute_accuray(F.log_softmax(output,dim=<span class="number">1</span>),target)</span><br><span class="line"> train_acc+=acc</span><br><span class="line"> lr_scheduler.step()</span><br><span class="line"> train_losses.append(train_loss/<span class="built_in">len</span>(train_loader))</span><br><span class="line"> train_accs.append(train_acc/<span class="built_in">len</span>(train_loader))</span><br><span class="line"></span><br><span class="line"> log_text=<span class="string">"Epoch {}/{} | train loss: {:.4f}, train acc: {:.4f}, "</span>.<span class="built_in">format</span>(</span><br><span class="line"> epoch+<span class="number">1</span>,</span><br><span class="line"> n_epoch,</span><br><span class="line"> train_loss/<span class="built_in">len</span>(train_loader),</span><br><span class="line"> train_acc/<span class="built_in">len</span>(train_loader),</span><br><span class="line"> )</span><br><span class="line"></span><br><span class="line"> model.train(mode=<span class="literal">False</span>)</span><br><span class="line"> val_loss=<span class="number">0.</span></span><br><span class="line"> val_acc=<span class="number">0.</span></span><br><span class="line"> output_dict=[]</span><br><span class="line"> target_dict=[]</span><br><span class="line"> np.random.seed(seed)</span><br><span class="line"> <span class="keyword">for</span> step,data <span class="keyword">in</span> <span class="built_in">enumerate</span>(tqdm(val_loader)):</span><br><span class="line"> img=data[<span class="string">'img'</span>].to(device, non_blocking=<span class="literal">True</span>).<span class="built_in">float</span>()</span><br><span class="line"> target=data[<span class="string">'label'</span>].to(device, non_blocking=<span class="literal">True</span>).long()</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">with</span> torch.no_grad():</span><br><span class="line"> output=model(img)</span><br><span class="line"> loss=criterion(output,target)</span><br><span class="line"> </span><br><span class="line"> loss_value=loss.item()</span><br><span class="line"> iter_loss.append(loss_value)</span><br><span class="line"> val_loss+=loss_value</span><br><span class="line"> acc=compute_accuray(F.log_softmax(output,dim=<span class="number">1</span>),target)</span><br><span class="line"> val_acc+=acc</span><br><span class="line"> output_dict+=output.softmax(<span class="number">1</span>)[:,<span class="number">1</span>].cpu().data.numpy().tolist()</span><br><span class="line"> target_dict+=target.cpu().data.numpy().tolist()</span><br><span class="line"> val_losses.append(val_loss/<span class="built_in">len</span>(val_loader))</span><br><span class="line"> val_accs.append(val_acc/<span class="built_in">len</span>(val_loader))</span><br><span class="line"> val_auc=roc_auc_score(target_dict,output_dict)</span><br><span class="line"> log_text+=<span class="string">"val loss: {:.4f}, val acc: {:.4f}, val auc: {:.4f}"</span>.<span class="built_in">format</span>(</span><br><span class="line"> val_loss/<span class="built_in">len</span>(val_loader),</span><br><span class="line"> val_acc/<span class="built_in">len</span>(val_loader),</span><br><span class="line"> val_auc</span><br><span class="line"> )</span><br><span class="line"> </span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> <span class="built_in">len</span>(weight_dict)<n_weight:</span><br><span class="line"> save_model_path=os.path.join(save_path+<span class="string">'weights/'</span>,<span class="string">"{}_{:.4f}_val.tar"</span>.<span class="built_in">format</span>(epoch+<span class="number">1</span>,val_auc))</span><br><span class="line"> weight_dict[save_model_path]=val_auc</span><br><span class="line"> torch.save({</span><br><span class="line"> <span class="string">"model"</span>:model.state_dict(),</span><br><span class="line"> <span class="string">"optimizer"</span>:model.optimizer.state_dict(),</span><br><span class="line"> <span class="string">"epoch"</span>:epoch</span><br><span class="line"> },save_model_path)</span><br><span class="line"> last_val_auc=<span class="built_in">min</span>([weight_dict[k] <span class="keyword">for</span> k <span class="keyword">in</span> weight_dict])</span><br><span class="line"></span><br><span class="line"> <span class="keyword">elif</span> val_auc>=last_val_auc:</span><br><span class="line"> save_model_path=os.path.join(save_path+<span class="string">'weights/'</span>,<span class="string">"{}_{:.4f}_val.tar"</span>.<span class="built_in">format</span>(epoch+<span class="number">1</span>,val_auc))</span><br><span class="line"> <span class="keyword">for</span> k <span class="keyword">in</span> weight_dict:</span><br><span class="line"> <span class="keyword">if</span> weight_dict[k]==last_val_auc:</span><br><span class="line"> <span class="keyword">del</span> weight_dict[k]</span><br><span class="line"> os.remove(k)</span><br><span class="line"> weight_dict[save_model_path]=val_auc</span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> torch.save({</span><br><span class="line"> <span class="string">"model"</span>:model.state_dict(),</span><br><span class="line"> <span class="string">"optimizer"</span>:model.optimizer.state_dict(),</span><br><span class="line"> <span class="string">"epoch"</span>:epoch</span><br><span class="line"> },save_model_path)</span><br><span class="line"> last_val_auc=<span class="built_in">min</span>([weight_dict[k] <span class="keyword">for</span> k <span class="keyword">in</span> weight_dict])</span><br><span class="line"> </span><br><span class="line"> logger.info(log_text)</span><br><span class="line"> </span><br><span class="line"><span class="keyword">if</span> __name__==<span class="string">'__main__'</span>:</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> parser=argparse.ArgumentParser()</span><br><span class="line"> parser.add_argument(dest=<span class="string">'config'</span>)</span><br><span class="line"> parser.add_argument(<span class="string">'-n'</span>,dest=<span class="string">'session_name'</span>)</span><br><span class="line"> args=parser.parse_args()</span><br><span class="line"> main(args)</span><br><span class="line"> </span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>计算机</category>
<category>CV学习</category>
</categories>
</entry>
<entry>
<title>LSTM长短期记忆</title>
<url>/learn_blog/2024/03/25/LSTM%E9%95%BF%E7%9F%AD%E6%9C%9F%E8%AE%B0%E5%BF%86/</url>
<content><![CDATA[<h1 id="LSTM的概念与RNN的区别"><a href="#LSTM的概念与RNN的区别" class="headerlink" title="LSTM的概念与RNN的区别"></a>LSTM的概念与RNN的区别</h1><p>LSTM(Long Short-Term Memory)是一种长短期记忆网络,是一种特殊的RNN(循环神经网络)。与传统的RNN相比,LSTM更加适用于处理和预测时间序列中间隔较长的重要事件。</p>
<p>传统的RNN结构可以看做是多个重复的神经元构成的“回路”,每个神经元都接受输入信息并产生输出,然后将输出再次作为下一个神经元的输入,依次传递下去。这种结构能够在序列数据上学习短时依赖关系,但是由于梯度消失和梯度爆炸问题,RNN在处理长序列时难以达到很好的性能。</p>
<p>而LSTM通过引入记忆细胞、输入门、输出门和遗忘门的概念,能够有效地解决长序列问题。</p>
<p>记忆细胞负责保存重要信息,输入门决定要不要将当前输入信息写入记忆细胞,遗忘门决定要不要遗忘记忆细胞中的信息,输出门决定要不要将记忆细胞的信息作为当前的输出。</p>
<p>这些门的控制能够有效地捕捉序列中重要的长时间依赖性,并且能够解决梯度问题。</p>
<h1 id="LSTM结构和原理"><a href="#LSTM结构和原理" class="headerlink" title="LSTM结构和原理"></a>LSTM结构和原理</h1><p>LSTM结构包括了记忆细胞、输入门、输出门和遗忘门这四个部分。</p>
<ul>
<li>记忆细胞(memory cell): 它是 LSTM 的核心,负责保存重要的信息,并将这些信息传递给后面的网络层。</li>
<li>输入门(input gate): 决定了当前输入信息是否写入记忆细胞,也就是说,能够控制输入信息对记忆细胞的影响。</li>
<li>遗忘门(forget gate): 决定了记忆细胞中的信息是否被遗忘,也就是说,能够控制记忆细胞中保存的信息会不会消失。</li>
<li>输出门(output gate): 决定了记忆细胞中的信息是否输出,也就是说,能够控制记忆细胞中保存的信息会不会对后面的网络层造成影响。</li>
</ul>
<p>这四个部分通过计算权重矩阵和输入信号的点积,并通过激活函数(通常是sigmoid函数)计算出每个门的输出值,再乘上记忆细胞的值来进行最终计算。</p>
<p><strong>结构</strong></p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/20200330163256331.png" alt="在这里插入图片描述"></p>
<p>LSTM模型是由 t 时刻的输入$X_t$,细胞状态$C_t$,临时细胞状态$\tilde{c}_t$,隐藏层状态$h_t$,遗忘门$f_t$,记忆门$i_t$,输出门$o_t$组成。</p>
<p>LSTM的计算过程可以概括为,通过对细胞状态中信息遗忘和记忆新的信息使得对后续时刻计算有用的信息得以传递,而无用的信息被丢弃,并在每个时间步都会输出隐层状态$h_t$。</p>
<p><strong>cell状态</strong></p>
<p>cell状态有点像传送带,它只用一些次要的线性交互就能贯穿整个链式结构,这其实也就是信息记忆的地方,因此信息能很容易地以不变的形式从中流过。</p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/pIYBAFrr1fCAPfVOAABtsGAJp_U372.png" alt="img"></p>
<p>为了增加/删除cell中的信息,LSTM中有一些控制门(gate)。它们决定了信息通过的方式,包含一个sigmoid神经网络层和一个pointwise点乘操作。</p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/pIYBAFrr1fGAe5PzAAAIs7gzYW4757.jpg" alt="img"></p>
<p>sigmoid层输出0到1之间的数字,点乘操作决定多少信息可以传送过去,当为0时,不传送;当为1时,全部传送。</p>
<p>像这样的控制门,LSTM共有3个,以此保护和控制cell状态。</p>
<p><strong>遗忘门</strong></p>
<p>对于输入$x<em>t$和$h</em>{t-1}$,遗忘门会输出一个值域为[0, 1]的数字,放进细胞状态$C_{t−1}$中。当为0时,全部删除;当为1时,全部保留。</p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/pIYBAFrr1fGATapCAACa8w-t1tA951.png" alt="img"></p>
<p><strong>输入门</strong></p>
<p>分为两步,首先,LSTM会用一个包含sigmoid层的输入门决定哪些信息该保留,其次,它会用一个$tanh$层为这些信息生成一个向量$\tilde{c}_t$,用来更新细胞状态。</p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/pIYBAFrr1fGAJko6AAC8z6KeefY047.png" alt="img"></p>
<p><strong>输出门</strong></p>
<p>有了遗忘门和输入门,现在我们就能把细胞状态$C<em>{t−1}$更新为$C</em>{t}$了。如下图所示,其中$f<em>t×C</em>{t−1}$表示希望删除的信息,$i_t×C_t$表示新增的信息。</p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/pIYBAFrr1fGAQ_DiAACnSY72yLs112.png" alt="img"></p>
<h1 id="Bi-LSTM"><a href="#Bi-LSTM" class="headerlink" title="Bi-LSTM"></a>Bi-LSTM</h1><p>前向的LSTM与后向的LSTM结合成BiLSTM,将前向和后向的隐向量进行拼接.</p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/20200330164206271.png" alt="在这里插入图片描述"></p>
<p><img src="https://gitee.com/qinyueren/drawing-bed/raw/master/20200330164838930.png" alt="在这里插入图片描述"></p>
]]></content>
<categories>
<category>计算机</category>
<category>CV学习</category>
</categories>
</entry>
<entry>
<title>OpenGL学习</title>
<url>/learn_blog/2024/03/26/OpenGL%E5%AD%A6%E4%B9%A0/</url>
<content><![CDATA[]]></content>
<categories>
<category>计算机</category>
<category>图形学</category>
</categories>
</entry>
<entry>
<title>图形学学习知识一览</title>
<url>/learn_blog/2024/03/26/%E5%9B%BE%E5%BD%A2%E5%AD%A6%E5%AD%A6%E4%B9%A0%E7%9F%A5%E8%AF%86%E4%B8%80%E8%A7%88/</url>
<content><![CDATA[<h1 id="OpenGL"><a href="#OpenGL" class="headerlink" title="OpenGL"></a>OpenGL</h1><h2 id="学习"><a href="#学习" class="headerlink" title="学习"></a>学习</h2><p><a href="https://learnopengl-cn.github.io/">主页 - LearnOpenGL CN (learnopengl-cn.github.io)</a></p>
<h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><p><strong>OpenGL</strong>(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来绘制从简单的图形到比较复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。</p>
<h2 id="功能"><a href="#功能" class="headerlink" title="功能"></a>功能</h2><ul>
<li><strong>建立3D模型:</strong>OpenGL除了能够处理一般的2D图形,即点、线、面的绘制外,主要任务是集合了3D立体的物体绘制函数。</li>
<li><strong>图形变换:</strong>OpenGL利用基本变换以及投影变换处理图形。所谓的基本变换就是在处理2D平面图形时的平移、旋转、变比、镜像变换。投影变换就是在处理3D立体图形时的平行投影以及透视投影。通过变换方式,可以将2D的平面图形清晰明了的变换成3D的立体图形,从而在减少计算的时间的同时就能够提高了图形显示的速度。</li>
<li><strong>颜色模式:</strong>OpenGL库中的颜色模型:使用较为广泛的RGBA模式以及颜色索引模式(color index)。</li>
<li><strong>光照、材质的设置:</strong>OpenGL库中包含了多种光照的类型。材质是用光反射率来表示的。其原理是基于人眼的原理,场景中的物体是由光的红绿蓝的分量以及材质的红绿蓝的反射率的乘积后所形成的颜色值。</li>
<li><strong>纹理映射:</strong>纹理指的是物体表面的花纹。OpenGL库中集合了对于物体纹理的映射处理方式,能够十分完整的复现物体表面的真实纹理。</li>
<li><strong>图像增强功能和位图显示的扩展功能:</strong>OpenGL的功能包括像素的读写、复制外,以及一些特殊的图像处理功能:比如,融合、反走样、雾的等等特殊的处理方式。对于图像的重现和处理,可以使得效果更有真实感,逼真。</li>
<li><strong>双缓存功能:</strong>OpenGL创新性的运用了双缓存形式。计算场景、生成画面图像、显示画面图像分别将其由前台缓存和后台缓存分开处理,大大提高了计算机的运算能力以及画面的显示速度。 [2]</li>
</ul>
<h1 id="OpenCV"><a href="#OpenCV" class="headerlink" title="OpenCV"></a>OpenCV</h1><p>OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 [1]它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。<br>OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。</p>
<h1 id="Vulkan"><a href="#Vulkan" class="headerlink" title="Vulkan"></a>Vulkan</h1><p>ulkan是一个跨平台的2D和3D绘图应用程序接口(API),最早由科纳斯组织(Khronos Group) [1]在2015年游戏开发者大会(GDC)上发表。<br>科纳斯最先把VulkanAPI称为“下一代OpenGL行动”(next generation OpenGL initiative)或“glNext”, [2]但在正式宣布Vulkan之后这些名字就没有再使用了。就像OpenGL,Vulkan针对实时3D程序(如电子游戏)设计,Vulkan并计划提供高性能和低CPU管理负担(overhead),这也是Direct3D12和AMD的Mantle的目标。Vulkan兼容Mantle的一个分支,并使用了Mantle的一些组件。<br>Vulkan旨在提供更低的CPU开销与更直接的GPU控制,其理念大致与Direct3D 12和Mantle类似。</p>
<h1 id="Game101"><a href="#Game101" class="headerlink" title="Game101"></a>Game101</h1><h2 id="视频"><a href="#视频" class="headerlink" title="视频"></a>视频</h2><p><a href="https://www.bilibili.com/video/BV1X7411F744/?t=1749&vd_source=04946b2b94db8891e29af8d8d8614fc2">GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili</a></p>
<h2 id="应用"><a href="#应用" class="headerlink" title="应用"></a>应用</h2><h3 id="1-全局关照技术"><a href="#1-全局关照技术" class="headerlink" title="1. 全局关照技术"></a>1. 全局关照技术</h3><p>全局光照(Global Illumination,简称 GI), 作为图形学中比较酷的概念之一,是指既考虑场景中来自光源的直接光照,又考虑经过场景中其他物体反射后的间接光照的一种渲染技术。</p>
<p>即可以理解为:全局光照 = 直接光照(Direct Light) + 间接光照(Indirect Light) </p>
<h3 id="2-卡通渲染"><a href="#2-卡通渲染" class="headerlink" title="2. 卡通渲染"></a>2. 卡通渲染</h3><p>美式卡通风格在色彩上比较连续,有渐变色,着色风格很大程度上依赖于艺术家定义的色调(tone),而在阴影和高光方面常常采取夸张和变形的做法 。</p>
<p>日式卡通风格往往角色造型更写实,但在着色方面,则趋向于大片大片纯色色块,并有的明暗交界 </p>
<h3 id="3-特效"><a href="#3-特效" class="headerlink" title="3. 特效"></a>3. 特效</h3><p>最简单的图形学应用——平常不常见的画面,穿帮被发现概率小 </p>
<h3 id="4-面部动作捕捉"><a href="#4-面部动作捕捉" class="headerlink" title="4. 面部动作捕捉"></a>4. 面部动作捕捉</h3><p>它是动作捕捉(Motion Capture)技术的一部分,指使用机械装置、相机等设备记录人类面部表情和动作,将之转换为一系列参数数据的过程。</p>
<p>与捕捉由关节点构成、较为稳定的人体动作相比,面部表情更为细微复杂,因此对数据精度要求更高。</p>
<p>CG 电影、大型游戏在预算允许的情况下,倾向于选择捕捉真人面部来完成角色的演出。与人为制作的动画角色表情相比,通过捕捉真人面部动作生成的角色会更具真实感。 </p>
<h3 id="5-毛发模型和渲染"><a href="#5-毛发模型和渲染" class="headerlink" title="5. 毛发模型和渲染"></a>5. 毛发模型和渲染</h3><p>毛发渲染一直是实时图形学的难题,因为其光照复杂,数量众多,物理效果不好抽象等。在早期,只能通过若干面片代替,后来随着硬件及渲染技术的提升,慢慢发展出了经验模型的Kajiya-Kay和基于物理的Marschner毛发渲染模型。 </p>
<h3 id="6-模拟动画-仿真"><a href="#6-模拟动画-仿真" class="headerlink" title="6.模拟动画/仿真"></a>6.模拟动画/仿真</h3><p>今天的游戏动画应用了多种物理模拟技术,例如运动学模拟(kinematics simulation),刚体动力学模拟(rigid body dynamics simulation),绳子/布料模拟(string/cloth simulation),柔体动力学模拟(soft body dynamics simulation),流体动力学模拟(fluid dynamics simulation)等等。另外碰撞侦测(collision detection)是许多模拟系统里所需的。</p>
<h3 id="7-计算机辅助设计-CAD"><a href="#7-计算机辅助设计-CAD" class="headerlink" title="7.计算机辅助设计(CAD)"></a>7.计算机辅助设计(CAD)</h3><p>CAD是利用计算机快速的数值计算和强大的图文处理功能,辅助工程技术人员进行产品设计、工程绘图和数据管理的一门计算机应用技术,是计算机科学技术发展和应用中的一门重要技术。</p>
<p>CAD的涵盖范围很广,其设计对象最初包括两大类,一类是机械、电子、汽车、航天、农业、轻工和纺织产品等;另一类是工程设计产品等,如工程建筑。如今,CAD技术的应用范围已经延伸到诸如艺术等各行各业,如电影、动画、广告、娱乐和多媒体仿真等都属于CAD范畴。</p>
<h3 id="8-可视化"><a href="#8-可视化" class="headerlink" title="8. 可视化"></a>8. 可视化</h3><p>视化是利用计算机图形学和图像处理技术,将数据转换成图形或图像在屏幕上显示出来,并进行交互处理的理论、方法和技术。它涉及到计算机图形学、图像处理、计算机视觉、计算机辅助设计等多个领域,成为研究数据表示、数据处理、决策分析等一系列问题的综合技术。目前正在飞速发展的虚拟现实技术也是以图形图像的可视化技术为依托的。</p>
<p>可视化技术最早运用于计算机科学中,并形成了可视化技术的一个重要分支——科学计算可视化(Visualization in Scientific Computing)。科学计算可视化能够把科学数据,包括测量获得的数值、图像或是计算中涉及、产生的数字信息变为直观的、以图形图像信息表示的、随时间和空间变化的物理现象或物理量呈现在研究者面前,使他们能够观察、模拟和计算。</p>
<h3 id="9-VR-AR-MR"><a href="#9-VR-AR-MR" class="headerlink" title="9. VR.AR.MR"></a>9. VR.AR.MR</h3><p>虚拟现实(Virtual Reality)</p>
<p>所谓虚拟现实,顾名思义,就是虚拟和现实相互结合。从理论上来讲,虚拟现实技术(VR)是一种可以创建和体验虚拟世界的计算机仿真系统,它利用计算机生成一种模拟环境,使用户沉浸到该环境中。虚拟现实技术就是利用现实生活中的数据,通过计算机技术产生的电子信号,将其与各种输出设备结合使其转化为能够让人们感受到的现象,这些现象可以是现实中真真切切的物体,也可以是我们肉眼所看不到的物质,通过三维模型表现出来。因为这些现象不是我们直接所能看到的,而是通过计算机技术模拟出来的现实中的世界,故称为虚拟现实。</p>
<p>增强现实(Augmented Reality)</p>
<p>增强现实技术也被称为扩增现实,AR增强现实技术是促使真实世界信息和虚拟世界信息内容之间综合在一起的较新的技术内容,其将原本在现实世界的空间范围中比较难以进行体验的实体信息在电脑等科学技术的基础上,实施模拟仿真处理,叠加将虚拟信息内容在真实世界中加以有效应用,并且在这一过程中能够被人类感官所感知,从而实现超越现实的感官体验。真实环境和虚拟物体之间重叠之后,能够在同一个画面以及空间中同时存在。</p>
<p>混合现实(Mixed Reality)</p>
<p>混合现实技术(MR)是虚拟现实技术的进一步发展,该技术通过在虚拟环境中引入现实场景信息,在虚拟世界、现实世界和用户之间搭起一个交互反馈的信息回路,以增强用户体验的真实感。</p>
<p>混合现实是一组技术组合,不仅提供新的观看方法,还提供新的输入方法,而且所有方法相互结合,从而推动创新 。输入和输出的结合对中小型企业而言是关键的差异化优势。这样,混合现实就可以直接影响工作流程,帮助员工提高工作效率和创新能力。</p>
<h3 id="10-图形用户界面"><a href="#10-图形用户界面" class="headerlink" title="10. 图形用户界面"></a>10. 图形用户界面</h3><p>图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。</p>
<p>图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。图形用户界面由窗口、下拉菜单、对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相同的操作总是以同样的方式来完成,在图形用户界面,用户看到和操作的都是图形对象,应用的是计算机图形学的技术 </p>
<h3 id="11-字体排印学"><a href="#11-字体排印学" class="headerlink" title="11. 字体排印学"></a>11. 字体排印学</h3><p>一种涉及对字体、字号、缩进、行间距、字符间距进行设计、安排等方法来进行排版的一种工艺。在数码技术普及之前,字体排印是一项专业的工作,数码时代的来临使字体排印不像从前仅由排字印刷方面的技术工人完成,而更被图形艺术家、艺术指导、文书人员甚至儿童广泛使用。 </p>
<h1 id="Direct3D-D3D"><a href="#Direct3D-D3D" class="headerlink" title="Direct3D(D3D)"></a>Direct3D(D3D)</h1><p>Direct 3D是基于微软的通用对象模式COM(Common Object Mode)的3D图形API。它是由微软(Microsoft)一手树立的3D API规范,微软公司拥有该库版权,它所有的语法定义包含在微软提供的程序开发组件的帮助文件、源代码中。Direct3D是微软公司DirectX SDK集成开发包中的重要部分,适合多媒体、娱乐、即时3D动画等广泛和实用的3D图形计算。自1996年发布以来,Direct3D以其良好的硬件兼容性和友好的编程方式很快得到了广泛的认可,现在几乎所有的具有3D图形加速的主流显示卡都对Direct3D提供良好的支持。但它也有缺陷,由于是以COM接口形式提供的,所以较为复杂,稳定性差,另外,目前只在Windows平台上可用。</p>
<h1 id="metal"><a href="#metal" class="headerlink" title="metal"></a>metal</h1><p>在 WWDC 2014 上,Apple为游戏开发者推出了新的平台技术 Metal,该技术能够为 3D 图像提高 10 倍的渲染性能,并支持大家熟悉的游戏引擎及公司。<br>Metal 是一种低层次的渲染应用程序编程接口,提供了软件所需的最低层,保证软件可以运行在不同的图形芯片上。Metal 提升了 A7 与 A8 处理器效能,让其性能完全发挥。</p>
<h1 id="cuda"><a href="#cuda" class="headerlink" title="cuda"></a>cuda</h1><p>CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 开发人员可以使用C语言来为CUDA™架构编写程序,所编写出的程序可以在支持CUDA™的处理器上以超高性能运行。CUDA3.0已经开始支持C++和FORTRAN。</p>
<h1 id="unity"><a href="#unity" class="headerlink" title="unity"></a>unity</h1><p>Unity [1]是实时3D互动内容创作和运营平台 [2]。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助Unity将创意变成现实。 [3]Unity平台提供一整套完善的软件解决方案 [3],可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 [3]<br>基于Unity开发的游戏和体验月均下载量高达30亿次 [4],并且其在2019年的安装量已超过370亿次 [4] 。全平台(包括PC/主机/移动设备)所有游戏中有超过一半都是使用Unity创作的;在Apple应用商店和Google Play上排名最靠前的1000款游戏中,53%都是用Unity创作的。 [5]Unity提供易用实时平台,开发者可以在平台上构建各种AR和VR互动体验。</p>
<h1 id="Unreal"><a href="#Unreal" class="headerlink" title="Unreal"></a>Unreal</h1><p>Unreal是UNREAL ENGINE(虚幻引擎)的简写,由Epic开发,是世界知名授权最广的游戏引擎之一。<br>虚幻技术研究中心在上海成立,该中心由GA国际游戏教育与虚幻引擎开发商EPIC的中国子公司EPIC GAMES CHINA联合设立。</p>
<h1 id="CAD"><a href="#CAD" class="headerlink" title="CAD"></a>CAD</h1><p>利用计算机及其图形设备帮助设计人员进行设计工作。简称CAD。 在工程和产品设计中,计算机可以帮助设计人员担负计算、信息存储和制图等项工作。在设计中通常要用计算机对不同方案进行大量的计算、分析和比较,以决定最优方案;各种设计信息,不论是数字的、文字的或图形的,都能存放在计算机的内存或外存里,并能快速地检索;设计人员通常用草图开始设计,将草图变为工作图的繁重工作可以交给计算机完成;利用计算机可以进行与图形的编辑、放大、缩小、平移和旋转等有关的图形数据加工工作。</p>
<h1 id="CAE"><a href="#CAE" class="headerlink" title="CAE"></a>CAE</h1><p>CAE(Computer Aided Engineering)指工程设计中的计算机辅助工程,指用计算机辅助求解分析复杂工程和产品的结构力学性能,以及优化结构性能等,把工程(生产)的各个环节有机地组织起来,其关键就是将有关的信息集成,使其产生并存在于工程(产品)的整个生命周期。而CAE软件可作静态结构分析,动态分析;研究线性、非线性问题;分析结构(固体)、流体、电磁等。</p>
<h1 id="CAM"><a href="#CAM" class="headerlink" title="CAM"></a>CAM</h1><p>计算机辅助制造是指在机械制造业中,利用电子数字计算机通过各种数值控制机床和设备,自动完成离散产品的加工、装配 、检测和包装等制造过程。简称cam。</p>
<h1 id="Eda"><a href="#Eda" class="headerlink" title="Eda"></a>Eda</h1><p><strong>电子设计自动化</strong>(英语:<strong>Electronic design automation</strong>,缩写:<strong>EDA</strong>)是指利用计算机辅助设计(CAD)软件,来完成超大规模集成电路(VLSI)芯片的功能设计、综合、验证、物理设计(包括布局、布线、版图、设计规则检查等)等流程的设计方式。</p>
<h1 id="微分几何"><a href="#微分几何" class="headerlink" title="微分几何"></a>微分几何</h1><p>微分几何是运用微积分的理论研究空间的几何性质的数学分支学科。<br>古典微分几何研究三维空间中的曲线和曲面,而现代微分几何开始研究更一般的空间——流形。<br>微分几何与拓扑学等其他数学分支有紧密的联系,对物理学的发展也有重要影响。爱因斯坦的广义相对论就以微分几何中的黎曼几何作为其重要的数学基础。</p>
<h1 id="计算几何"><a href="#计算几何" class="headerlink" title="计算几何"></a>计算几何</h1><h3 id="几何化"><a href="#几何化" class="headerlink" title="几何化"></a>几何化</h3><p>计算几何研究的对象是几个图形。早期人们对于图像的研究一般都是先建立坐标系,把图形转换成函数,然后用插值和逼近的数学方法,特别是用样条函数作为工具来分析图形,取得了可喜的成功。然而,这些方法过多地依赖于坐标系的选取,缺乏几何不变性,特别是用来解决某些大挠度曲线及曲线的奇异点等问题时,有一定的局限性。</p>
<p>几何图形是实际物体的抽象描述,几何化是指被研究对象本身的性质所决定的一种必然趋势。</p>
<h3 id="代数化"><a href="#代数化" class="headerlink" title="代数化"></a>代数化</h3><p>在国外,计算几何的代数化有一股很强的势头。为了在计算机和图形显示终端表示和处理各种复杂的曲面和几何形体,需进行大量的计算,往往需要将问题代数化、线性化、离散化,特别对于最新式的全色连续色调的图像,必须对显示屏上的光栅网格点逐点进行计算扫描。</p>
<h3 id="图形化"><a href="#图形化" class="headerlink" title="图形化"></a>图形化</h3><p>随着交互式图形显示系统在CAGD中的广泛应用,计算机图形学作为新兴学科得到迅速发展。其主要研究对象是图形的生成、变换、显示、剪取、隐藏线和隐藏面的消除、阴影色调及相应的光顺处理等。其中剪取问题是计算机图形学的一个基本问题,剪取的关键是速度,尤其是在交互式动态显示和最新式的光扫描中。</p>
<h1 id="GDI"><a href="#GDI" class="headerlink" title="GDI"></a>GDI</h1><p>图形设备接口(GDI :Graphics Device Interface),它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。</p>
<h1 id="glsl"><a href="#glsl" class="headerlink" title="glsl"></a>glsl</h1><p>OpenGL着色语言(OpenGL Shading Language)是用来在OpenGL中着色编程的语言,也即开发人员写的短小的自定义程序,他们是在图形卡的GPU (Graphic Processor Unit图形处理单元)上执行的,代替了固定的渲染管线的一部分,使渲染管线中不同层次具有可编程性。比如:视图转换、投影转换等。GLSL(GL Shading Language)的着色器代码分成2个部分:Vertex Shader(顶点着色器)和Fragment(片断着色器),有时还会有Geometry Shader(几何着色器)。负责运行顶点着色的是顶点着色器。它可以得到当前OpenGL 中的状态,GLSL内置变量进行传递。GLSL其使用C语言作为基础高阶着色语言,避免了使用汇编语言或硬件规格语言的复杂性。</p>
]]></content>
<categories>
<category>计算机</category>
<category>图形学</category>
</categories>
</entry>
<entry>
<title>OpenGL学习</title>
<url>/learn_blog/2024/03/28/EDA%E5%BC%80%E5%8F%91/</url>
<content><![CDATA[<h1 id="ASIC设计"><a href="#ASIC设计" class="headerlink" title="ASIC设计"></a>ASIC设计</h1><h2 id="前端"><a href="#前端" class="headerlink" title="前端"></a>前端</h2><p><strong>确定项目需求</strong></p>
<ul>
<li>物理实现(制作工艺、面积、封装)</li>
<li>性能指标(速度、功耗)</li>
<li>功能指标(功能描述、接口定义)</li>
</ul>
<p><strong>芯片设计</strong></p>
<ul>
<li>项目分块</li>
<li>PTL代码设计(Verilog/SystemVerilog/VHDL)</li>
<li>IP集成</li>
</ul>
<p><strong>验证(Verification)</strong></p>
<ul>
<li>验证设计和计划</li>
<li>编写Testbench和Testcase</li>
<li>回归/还原测试</li>
<li>集成性验证</li>
</ul>
<p><strong>逻辑综合(Logic Synthesis)</strong></p>
<ul>
<li>将RTL代码设计映射到门级电路的网表</li>
</ul>
<p><strong>静态时序分析(STA)</strong></p>
<ul>
<li>套用特定的时序模型,针对特定电路分析其是否违反设计者给定的时序限制。通过数学计算方法,来计算所有的路径有没有满足时序。</li>
</ul>
<p><strong>可测性设计(DFT)</strong></p>
<ul>
<li>为了在芯片生成之后,测试芯片制作有无缺陷,一般在电路中插入扫描链</li>
</ul>
<h2 id="后端"><a href="#后端" class="headerlink" title="后端"></a>后端</h2><p><strong>布局布线</strong></p>
<p>信号布线,包括各种标准单元(基本逻辑门电路)之间的走线</p>
<p><strong>寄生参数提取和时序分析</strong></p>
<p>提取延迟信息,并加入布局布线延迟,得到更真实的时序分析</p>
<p><strong>版图物理验证</strong></p>
<p>DRC(设计规则检查)、LVS(版图一致性检查)</p>
<p><strong>生成GDSII文件,Tap_off流片</strong></p>
<h1 id="Eda工具"><a href="#Eda工具" class="headerlink" title="Eda工具"></a>Eda工具</h1><p><strong>Candence</strong></p>
<p><strong>Synopsys</strong></p>
<p><strong>Mentor</strong></p>
<h1 id="数学基础"><a href="#数学基础" class="headerlink" title="数学基础"></a>数学基础</h1><p><strong>数据结构</strong></p>
<p><strong>算法设计</strong></p>
<p><strong>图论算法</strong></p>
<p><strong>组合数学</strong></p>
<p><strong>计算几何</strong></p>
<h1 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h1><p><strong>pEDA-Schematic</strong></p>
<p><strong>Layout</strong></p>
<p><strong>Simulate</strong></p>
<p><strong>CAM</strong></p>
]]></content>
<categories>
<category>计算机</category>
<category>图形学</category>
</categories>
</entry>
<entry>
<title>FF++下载脚本</title>
<url>/learn_blog/2024/03/28/FF++%E4%B8%8B%E8%BD%BD%E8%84%9A%E6%9C%AC/</url>
<content><![CDATA[<h1 id="数据集结构"><a href="#数据集结构" class="headerlink" title="数据集结构"></a>数据集结构</h1><figure class="highlight 1c"><table><tr><td class="code"><pre><span class="line">FaceForensics++ dataset</span><br><span class="line"><span class="string">|-- downloaded_videos</span></span><br><span class="line"><span class="meta">#包含所有原始下载的视频、视频信息文件及其提取的序列,可用于提取数据集中使用的原始序列</span></span><br><span class="line"> </span><br><span class="line"><span class="string">|-- original_sequences</span></span><br><span class="line"> <span class="string">|-- youtube</span></span><br><span class="line"> <span class="meta"># c0/raw 原始序列 图像或者视频 的 FaceForensics++ 数据集</span></span><br><span class="line"> <span class="meta"># c23/hq 原始序列 图像或者视频</span></span><br><span class="line"> <span class="meta"># c40/lq 原始序列 图像或者视频</span></span><br><span class="line"> </span><br><span class="line"> <span class="string">|-- actors</span></span><br><span class="line"> <span class="meta"># 来自 DeepFakeDetection 的图像或者视频</span></span><br><span class="line"> </span><br><span class="line"><span class="string">|-- manipulated_sequences</span></span><br><span class="line"> <span class="string">|-- Deepfakes</span></span><br><span class="line"> <span class="meta"># 所有三个压缩度的图像/视频以及泊松图像编辑后的模型和遮罩</span></span><br><span class="line"> </span><br><span class="line"> <span class="string">|-- DeepFakeDetection</span></span><br><span class="line"> <span class="meta"># 所有三个压缩度的图像/视频以及泊松图像编辑后的模型和遮罩 </span></span><br><span class="line"> </span><br><span class="line"> <span class="string">|-- Face2Face</span></span><br><span class="line"> <span class="meta"># 所有三个压缩度的图像/视频以及泊松图像编辑后的模型和遮罩</span></span><br><span class="line"> </span><br><span class="line"> <span class="string">|-- FaceSwap</span></span><br><span class="line"> <span class="meta"># 所有三个压缩度的图像/视频以及泊松图像编辑后的模型和遮罩</span></span><br><span class="line"> </span><br><span class="line"> <span class="string">|-- NeuralTextures</span></span><br><span class="line"> <span class="meta"># 所有三个压缩度的图像/视频以及泊松图像编辑后的模型和遮罩 </span></span><br></pre></td></tr></table></figure>
<h1 id="文件大小"><a href="#文件大小" class="headerlink" title="文件大小"></a>文件大小</h1><ul>
<li>FaceForensics++<ul>
<li>视频<ul>
<li>YouTube <ul>
<li>原始视频:38.5GB</li>
<li>h264压缩<ul>
<li>raw/0: ~500GB</li>
<li>23: ~10GB</li>
<li>40: ~2GB</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>图像:2TB </li>
</ul>
</li>
<li>Deepfakedetection<ul>
<li>actor 视频<ul>
<li>raw/0: ~200GB</li>
<li>23: ~3GB</li>
<li>40: ~400MB</li>
</ul>
</li>
<li>manipulated 视频<ul>
<li>raw/0: ~1.6TB</li>
<li>c23: ~22GB</li>
<li>c40: ~3GB</li>
</ul>
</li>
</ul>
</li>
</ul>
<h1 id="下载脚本"><a href="#下载脚本" class="headerlink" title="下载脚本"></a>下载脚本</h1><p><strong>运行</strong></p>
<figure class="highlight vim"><table><tr><td class="code"><pre><span class="line"><span class="keyword">python</span> download-FaceForensics.<span class="keyword">py</span></span><br></pre></td></tr></table></figure>
<p><strong>参数</strong></p>
<figure class="highlight bnf"><table><tr><td class="code"><pre><span class="line">python download-FaceForensics.py</span><br><span class="line"> <span class="attribute"><输出路径></span></span><br><span class="line"> -d <span class="attribute"><数据集类型, Face2Face, original or all></span></span><br><span class="line"> -c <span class="attribute"><压缩质量, c23 or raw></span></span><br><span class="line"> -t <span class="attribute"><文件类型, videos, masks or models></span></span><br><span class="line"> -server EU2</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>计算机</category>
<category>CV学习</category>
</categories>
</entry>
<entry>
<title>icpr2020论文精读</title>
<url>/learn_blog/2024/03/27/icpr2020%E7%B2%BE%E8%AF%BB/</url>
<content><![CDATA[<h1 id="1-论文精读"><a href="#1-论文精读" class="headerlink" title="1. 论文精读"></a>1. 论文精读</h1><h2 id="EfficientNet"><a href="#EfficientNet" class="headerlink" title="EfficientNet"></a>EfficientNet</h2><h1 id="2-代码运行"><a href="#2-代码运行" class="headerlink" title="2. 代码运行"></a>2. 代码运行</h1><p><strong>数据集初始化</strong></p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">!python index_dfdc.py --<span class="built_in">source</span> <span class="string">"/home/jovyan/work/icpr2020/dfdc"</span></span><br></pre></td></tr></table></figure>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">parse_args</span>(<span class="params">argv</span>):</span><br><span class="line"> parser = argparse.ArgumentParser()</span><br><span class="line"> <span class="comment"># 路径应该写成 50个子数据集的根目录</span></span><br><span class="line"> parser.add_argument(<span class="string">'--source'</span>, <span class="built_in">type</span>=Path, <span class="built_in">help</span>=<span class="string">'Source dir'</span>, required=<span class="literal">True</span>)</span><br><span class="line"> parser.add_argument(<span class="string">'--videodataset'</span>, <span class="built_in">type</span>=Path, default=<span class="string">'data/dfdc_videos.pkl'</span>,</span><br><span class="line"> <span class="built_in">help</span>=<span class="string">'Path to save the videos DataFrame'</span>)</span><br><span class="line"> parser.add_argument(<span class="string">'--batch'</span>, <span class="built_in">type</span>=<span class="built_in">int</span>, <span class="built_in">help</span>=<span class="string">'Batch size'</span>, default=<span class="number">64</span>)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> parser.parse_args(argv)</span><br></pre></td></tr></table></figure>
<p><strong>提取人脸</strong></p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">!python extract_faces.py \</span><br><span class="line">--<span class="built_in">source</span> <span class="string">"/home/jovyan/work/icpr2020/dfdc"</span> \</span><br><span class="line">--videodf <span class="string">"/home/jovyan/work/icpr2020/data/dfdc_videos.pkl"</span>\</span><br><span class="line">--facesfolder <span class="string">"/home/jovyan/work/icpr2020/faces/output/directory"</span>\</span><br><span class="line">--facesdf <span class="string">"/home/jovyan/work/icpr2020/faces/df/output/directory"</span>\</span><br><span class="line">--checkpoint <span class="string">"/home/jovyan/work/icpr2020/tmp/outputs"</span></span><br></pre></td></tr></table></figure>
<figure class="highlight py"><table><tr><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">parse_args</span>(<span class="params">argv</span>):</span><br><span class="line"> parser = argparse.ArgumentParser()</span><br><span class="line"> <span class="comment"># 路径应该写成 50个子数据集的根目录</span></span><br><span class="line"> parser.add_argument(<span class="string">'--source'</span>, <span class="built_in">type</span>=Path, <span class="built_in">help</span>=<span class="string">'Videos root directory'</span>, required=<span class="literal">True</span>)</span><br><span class="line"> <span class="comment"># dfdc_videos.pkl 文件</span></span><br><span class="line"> parser.add_argument(<span class="string">'--videodf'</span>, <span class="built_in">type</span>=Path, <span class="built_in">help</span>=<span class="string">'Path to read the videos DataFrame'</span>, required=<span class="literal">True</span>)</span><br><span class="line"> <span class="comment"># directory 路径</span></span><br><span class="line"> parser.add_argument(<span class="string">'--facesfolder'</span>, <span class="built_in">type</span>=Path, <span class="built_in">help</span>=<span class="string">'Faces output root directory'</span>, required=<span class="literal">True</span>)</span><br><span class="line"> <span class="comment"># directory 路径</span></span><br><span class="line"> parser.add_argument(<span class="string">'--facesdf'</span>, <span class="built_in">type</span>=Path, <span class="built_in">help</span>=<span class="string">'Path to save the output DataFrame of faces'</span>, required=<span class="literal">True</span>)</span><br><span class="line"> parser.add_argument(<span class="string">'--checkpoint'</span>, <span class="built_in">type</span>=Path, <span class="built_in">help</span>=<span class="string">'Path to save the temporary per-video outputs'</span>, required=<span class="literal">True</span>)</span><br><span class="line"></span><br><span class="line"> parser.add_argument(<span class="string">'--fpv'</span>, <span class="built_in">type</span>=<span class="built_in">int</span>, default=<span class="number">32</span>, <span class="built_in">help</span>=<span class="string">'Frames per video'</span>)</span><br><span class="line"> parser.add_argument(<span class="string">'--device'</span>, <span class="built_in">type</span>=torch.device,</span><br><span class="line"> default=torch.device(<span class="string">'cuda:0'</span> <span class="keyword">if</span> torch.cuda.is_available() <span class="keyword">else</span> <span class="string">'cpu'</span>),</span><br><span class="line"> <span class="built_in">help</span>=<span class="string">'Device to use for face extraction'</span>)</span><br><span class="line"> parser.add_argument(<span class="string">'--collateonly'</span>, <span class="built_in">help</span>=<span class="string">'Only perform collation of pre-existing results'</span>, action=<span class="string">'store_true'</span>)</span><br><span class="line"> parser.add_argument(<span class="string">'--noindex'</span>, <span class="built_in">help</span>=<span class="string">'Do not rebuild the index'</span>, action=<span class="string">'store_false'</span>)</span><br><span class="line"> parser.add_argument(<span class="string">'--batch'</span>, <span class="built_in">type</span>=<span class="built_in">int</span>, <span class="built_in">help</span>=<span class="string">'Batch size'</span>, default=<span class="number">16</span>)</span><br><span class="line"> parser.add_argument(<span class="string">'--threads'</span>, <span class="built_in">type</span>=<span class="built_in">int</span>, <span class="built_in">help</span>=<span class="string">'Number of threads'</span>, default=<span class="number">8</span>)</span><br><span class="line"> parser.add_argument(<span class="string">'--offset'</span>, <span class="built_in">type</span>=<span class="built_in">int</span>, <span class="built_in">help</span>=<span class="string">'Offset to start extraction'</span>, default=<span class="number">0</span>)</span><br><span class="line"> parser.add_argument(<span class="string">'--num'</span>, <span class="built_in">type</span>=<span class="built_in">int</span>, <span class="built_in">help</span>=<span class="string">'Number of videos to process'</span>, default=<span class="number">0</span>)</span><br><span class="line"> parser.add_argument(<span class="string">'--lazycheck'</span>, action=<span class="string">'store_true'</span>, <span class="built_in">help</span>=<span class="string">'Lazy check of existing video indexes'</span>)</span><br><span class="line"> parser.add_argument(<span class="string">'--deepcheck'</span>, action=<span class="string">'store_true'</span>, <span class="built_in">help</span>=<span class="string">'Try to open every image'</span>)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> parser.parse_args(argv)</span><br></pre></td></tr></table></figure>
<p><strong>train_binclass</strong></p>