प्रौद्योगिकी साझेदारी

[मशीन-शिक्षण-अभ्यासः] Datawhale Summer Camp 2: ऑडियो तथा वीडियो आक्रमणं रक्षा च (deepfake) आधाररेखा वाक्यव्याख्या

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

# दतावहले # ऐसमरकैम्प # समरकैम्प

लेख निर्देशिका

1. प्रतियोगिताप्रश्नानां संक्षिप्तपरिचयः

प्रतियोगिताकार्यं भवति यत् मुखप्रतिबिम्बं Deepfake इमेज अस्ति वा इति निर्धारयितुं तथा च Deepfake इमेज इति संभाव्यतास्कोरं निर्गन्तुं भवति । प्रतिभागिभ्यः विविध-डीपफेक-जनन-प्रौद्योगिकीनां जटिल-अनुप्रयोग-परिदृश्यानां च सामना कर्तुं डिटेक्शन-माडल-विकासस्य अनुकूलनस्य च आवश्यकता वर्तते, येन डीप-फैक-प्रतिबिम्ब-परिचयस्य सटीकतायां, दृढतायां च सुधारः भवति

2. प्रतियोगिताप्रश्नदत्तांशसमूहः

प्रशिक्षणसमूहस्य लेबलसञ्चिका train_label.txt मॉडलस्य प्रशिक्षणार्थं उपयुज्यते, यदा तु प्रमाणीकरणसमूहस्य लेबलसञ्चिका val_label.txt केवलं मॉडलट्यूनिङ्गार्थं उपयुज्यते । यथा, train_label.txt अथवा val_label.txt इत्यत्र प्रत्येकं पङ्क्तौ द्वौ भागौ स्तः, अल्पविरामेन पृथक्कृतौ । प्रथमः भागः सञ्चिकानाम (प्रत्ययः .mp4), द्वितीयः भागः वास्तविकं मूल्यम् अस्ति ।
1 इत्यस्य लक्ष्यमूल्यं गहनं नकली श्रव्यं भिडियो च सूचयति, 0 इत्यस्य लक्ष्यमूल्यं च वास्तविकमुखस्य श्रव्यं भिडियो च सूचयति ।

अधः train_label.txt तथा ​​val_label.txt इत्येतयोः नमूनानि सन्ति:

train_label.txt

video_name,target
96b04c80704f02cb426076b3f624b69e.mp4,0
16fe4cf5ae8b3928c968a5d11e870360.mp4,1
  • 1
  • 2
  • 3
  • 4
  • 5

val_label.txt

video_name,target
f859cb3510c69513d5c57c6934bc9968.mp4,0
50ae26b3f3ea85babb2f9dde840830e2.mp4,1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

सञ्चिकायां प्रत्येकं पङ्क्तौ द्वौ भागौ स्तः, अल्पविरामैः विभक्तौ । प्रथमः भागः विडियो सञ्चिकानाम अस्ति, द्वितीयः भागः च मॉडल् भविष्यवाणी (अर्थात् डीपफेक् विडियो इत्यस्य नमूनायाः संभाव्यतामूल्यं) अनुरूपः डीप्फेक् स्कोरः अस्ति कृपया अधोलिखितं प्रस्तुतीकरणसारूप्यं पश्यन्तु:

prediction.csv

video_name,score
658042526e6d0c199adc7bfeb1f7c888.mp4,0.123456
a20cf2d7dea580d0affc4d85c9932479.mp4,0.123456
  • 1
  • 2
  • 3
  • 4
  • 5

द्वितीयः चरणः प्रथमचरणस्य अनुसरणं करोति, यस्मिन् सार्वजनिकपरीक्षासमूहः मुक्तः भवति । प्रतिभागिभ्यः परीक्षणसेट् इत्यस्य भविष्यवाणीस्कोरसञ्चिकां prediction_test.csv इति प्रणाल्यां प्रस्तूयताम्, तथा च परीक्षणस्कोरपरिणामानां वास्तविकसमये ऑनलाइन प्रतिक्रियां दातुं आवश्यकम्।

द्वितीयचरणस्य अनन्तरं शीर्ष ३० दलाः तृतीयचरणं प्रति गमिष्यन्ति। अस्मिन् स्तरे प्रतियोगिनः कोड डॉकर तथा तकनीकी रिपोर्ट् प्रस्तूयन्ते । डॉकर-आवश्यकतासु मूलप्रशिक्षणसङ्केतः परीक्षण-एपिआइ च (कार्य-निवेशः प्रतिबिम्ब-मार्गः अस्ति तथा च निर्गमः मॉडलेन पूर्वानुमानितः गहन-अङ्कः) अन्तर्भवति प्रायोजकः प्रशिक्षणप्रक्रियायाः परीक्षणपरिणामानां च पुनरुत्पादनार्थं एल्गोरिदम्-सङ्केतस्य जाँचं कृत्वा पुनः चालयिष्यति ।

केवलं एकं प्रतिरूपं प्रस्तूयते, वैधजालमापदण्डाः च 200M (उपयोगः) अधिकं न भवेयुःथोपउपकरण सांख्यिकी मॉडल पैरामीटर)।

केवलं ImageNet1K इत्यनेन सह पूर्व-माडल-प्रशिक्षणस्य अनुमतिः अस्ति । प्रकाशितप्रशिक्षणसमूहस्य आधारेण उत्पन्नाः विस्तारिताः नमूनाः (दत्तांशवर्धन/डीफैकसाधनद्वारा) प्रशिक्षणार्थं उपयोक्तुं शक्यन्ते, परन्तु एतेषां साधनानां तृतीयचरणस्य प्रजननार्थं प्रस्तुतीकरणस्य आवश्यकता वर्तते

3. मूल्याङ्कनसूचकाः

मूल्याङ्कनसूचकाङ्कः मुख्यतया ROC वक्रस्य अधः AUC इत्यस्य उपयोगं सूचकाङ्करूपेण करोति AUC इत्यस्य मूल्यपरिधिः प्रायः अन्तः एव भवति0.5-1मध्ये, अन्यथा वयं चिन्तयामःएतत् उत्तमं यन्त्रशिक्षणप्रतिरूपं नास्ति . AUC यथा यथा 1 इत्यस्य समीपे भवति तथा तथा मॉडल् उत्तमः भवति । यदि AUC अस्पष्टानि श्रेणीपरिणामानि प्रस्तुतं करोति तर्हि वयं **TPR (true positive rate)** इत्यस्य उपयोगं सहायकसन्दर्भरूपेण कुर्मः। अवश्यं तदनुरूपः विधिः FPR अस्ति ।

F1-स्कोरइदमपि एकः सूचकः अस्ति यस्य वयं सन्दर्भं कर्तुं शक्नुमः: एषः सटीकतादरः, स्मरणदरः च अस्तिहार्मोनिक अर्थ

F 1 _ S कोर = 2 ∗ ( टीपी ) / ( 2 टीपी + एफएन + एफपी ) F1_स्कोर = 2 * (टीपी) / (2टीपी + एफएन + एफपी)1_अन्तर्भाग=2(टी.पी)/(2टी.पी+FN+FP)

यन्त्रशिक्षणं शिक्षितुं पूर्वं अस्माभिः द्वयोः महत्त्वपूर्णयोः अवधारणायोः समीक्षा कर्तव्या-विशुद्धतातथाप्रत्यावर्तन

विशुद्धता P recision = TPTP + FP परिशुद्धता = frac{TP}{TP+FP}पुrecअहम्‌अहम्‌o=टी.पी+FPटी.पी, यस्य उपयोगः मॉडलस्य मापनार्थं भवतिकार्यक्षमतां पश्यन्तु, सम्यक् पूर्वानुमानितनमूनानां मध्ये सकारात्मकाः इति पूर्वानुमानितानां नमूनानां अनुपातः ।

प्रत्यावर्तन R ecall = TPTP + FN स्मरण = frac{TP}{TP+FN}आरइत्यादिएकःll=टी.पी+FNटी.पी, यस्य उपयोगः मॉडलस्य मापनार्थं भवतिअन्वेषणप्रदर्शनम्, सकारात्मकत्वस्य पूर्वानुमानं येषां नमूनानां मध्ये वास्तवतः सकारात्मकाः सन्ति तेषां अनुपातः ।

सच्चा सकारात्मक दर (TPR) : १.
टीपीआर = टीपी / (टीपी + एफएन) २.
मिथ्या सकारात्मक दर (FPR) : १.
FPR = FP / (FP + TN) 1.1.
इत्यस्मिन्‌:
टीपी: आक्रमणस्य नमूना आक्रमणरूपेण सम्यक् चिह्नितं भवति;
टी.एन.- वास्तविकनमूनानि वास्तविकरूपेण सम्यक् चिह्नितानि भवन्ति;
एफ.पी.- वास्तविकनमूनानि आक्रमणरूपेण भूलवशं चिह्नितानि भवन्ति;
FN: आक्रमणस्य नमूना वास्तविकरूपेण गलतरूपेण चिह्नितः अस्ति।

सन्दर्भाः : अघजन, एच., अगस्टो, जे.सी., & डेल्गाडो, आर.एलसी (2009) (यदि शीर्षके दत्तं लिङ्कं उद्घाटयितुं न शक्यते तर्हि कृपया क्लिक् कुर्वन्तु:सम्पूर्ण पुस्तक)

अत्र मम TPR गणनालिपिः अस्ति:

l1 = [0,1,1,1,0,0,0,1]
l2 = [0,1,0,1,0,1,0,0]

def accuracy(y_true, y_pred):
    # 正确预测数初始化一个简单计数器
    correct_counter = 0
    # 遍历y_true, y_pred中所有元素
    # zip函数接受多个元组,返回他们组成的列表
    for yt, yp in zip(y_true, y_pred):
        if yt == yp:
            # 如果预测标签与真实标签相同,则增加计数器
            correct_counter += 1
    # 返回正确率,正确标签数/总标签数
    return correct_counter / len(y_true)
    
def false_positive(y_true, y_pred):
    # 初始化假阳性样本计数器
    fp = 0
    # 遍历y_true,y_pred中所有元素
    for yt, yp in zip(y_true, y_pred):
        # 若真实标签为负类但预测标签为正类,计数器增加
        if yt == 0 and yp == 1:
            fp += 1
    return fp

def false_negative(y_true, y_pred):
    # 初始化假阴性样本计数器
    fn = 0
    # 遍历y_true,y_pred中所有元素
    for yt, yp in zip(y_true, y_pred):
        # 若真实标签为正类但预测标签为负类,计数器增加
        if yt == 1 and yp == 0:
            fn += 1
    return fn
    
def true_positive(y_true, y_pred):
    # 初始化真阳性样本计数器
    tp = 0
    # 遍历y_true,y_pred中所有元素
    for yt, yp in zip(y_true, y_pred):
        # 若真实标签为正类且预测标签也为正类,计数器增加
        if yt == 1 and yp == 1:
            tp += 1
    return tp

def true_negative(y_true, y_pred):
    # 初始化真阴性样本计数器
    tn = 0
    # 遍历y_true,y_pred中所有元素
    for yt, yp in zip(y_true, y_pred):
        # 若真实标签为负类且预测标签也为负类,计数器增加
        if yt == 0 and yp == 0:
            tn += 1
    # 返回真阴性样本数
    return tn
    
# 您可以尝试更好的精确度计算方式
def accuracy_v2(y_true, y_pred):
  # 真阳性样本数
  tp = true_positive(y_true, y_pred)
  # 假阳性样本数
  fp = false_positive(y_true, y_pred)
  # 假阴性样本数
  fn = false_negative(y_true, y_pred)
  # 真阴性样本数
  tn = true_negative(y_true, y_pred)
  # 准确率
  accuracy_score = (tp + tn) / (tp + tn + fp + fn)
  return accuracy_score
  
# F1-score的计算方法
def f1(y_true,y_pred):
    p = precision(y_true, y_pred)
    r = recall(y_true,y_pred)
    score = 2*p*r/(p+r)
    return score
    

  • 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

यदि वर्गीकरणस्य आवश्यकता अस्ति तर्हि भवतः सीमायाः आवश्यकता भवितुम् अर्हति । पूर्वानुमानितमूल्येन सह तस्य सम्बन्धः यथा भवति ।

P rediction = P robability > T hreshold भविष्यवाणी = संभाव्यता > सीमापुपुनःअहम्‌अहम्‌o=पुरोबबिअहम्‌य्>टीरेसo

AUC ज्ञात्वा अन्यत् महत्त्वपूर्णं मेट्रिकं भवद्भिः शिक्षितव्यं log loss इति । द्विचक्रीयवर्गीकरणसमस्यानां कृते वयं log loss इत्यस्य परिभाषां कुर्मः यथा:

L og L oss = − लक्ष्य ∗ log ( p ) − ( 1 − लक्ष्य ) ∗ log ( 1 − p ) LogLoss = -लक्ष्य * लॉग (p) - (1-लक्ष्य) * log (1-p)ogLoss=एकःo(पृ)(1एकः)o(1पृ)

तेषु लक्ष्यमूल्यं 0 अथवा 1 भवति, पूर्वानुमानितमूल्यं च नमूना 1 श्रेणीयाः अस्ति इति संभावना भवति । लॉग हानिः अत्यन्तं निश्चितं अत्यन्तं गलतं च भविष्यवाणीं दण्डयति । लॉग् हानिः यथा लघु भवति तथा मॉडलेन पूर्वानुमानितसंभावना लक्ष्यमूल्येन समीपं भवति ।

वर्गीकरणसमस्यासु अपि एतेषां सूचकानाम् उपयोगं कर्तुं शक्नुमः :

  • स्थूल-सरासरी सटीकता: सर्वेषां वर्गानां सटीकता पृथक् पृथक् गणयन्तु ततः औसतं कुर्वन्तु
  • सूक्ष्म-सरासरी परिशुद्धता: सर्वेषां वर्गानां सटीकता गणयन्तु ततः तेषां भारितसरासरी गणयन्तु।
  • भारित परिशुद्धता : सर्वेषां वर्गानां सटीकता गणयन्तु ततः तेषां भारितसरासरी गणयन्तु। भारितसरासरी प्रत्येकस्य वर्गस्य भारस्य गुणनफलं भवति ।

4. समग्रतया आधाररेखा

४.१ नमूनानां संख्यां गणयन्तु

# “word count” 的缩写,是一个用于计数的 Unix 命令。-l 只计算行数
!wc -l /kaggle/input/ffdv-sample-dataset/ffdv_phase1_sample/train_label.txt
!wc -l /kaggle/input/ffdv-sample-dataset/ffdv_phase1_sample/val_label.txt
  • 1
  • 2
  • 3

अस्माभिः केवलं पङ्क्तिसङ्ख्यां गणनीया, यत् नमूनानां संख्यां सूचयति ।

4.2 विडियो ऑब्जेक्ट् रचयन्तु

from IPython.display import Video
Video("/kaggle/input/ffdv-sample-dataset/ffdv_phase1_sample/valset/00882a2832edbcab1d3dfc4cc62cfbb9.mp4", embed=True)
  • 1
  • 2

विडियो विडियो ऑब्जेक्ट् निर्माति, एम्बेड् इत्यस्य अर्थः अस्ति यत् यदा True इति सेट् भवति तदा विडियो प्लेयर् प्रत्यक्षतया नोटबुक् कोष्ठकस्य आउटपुट् मध्ये प्रदर्शितः भविष्यति ।
kaggle इत्यस्य आधाररेखायां चालनस्य अनन्तरं भवद्भिः एतादृशाः परिणामाः द्रष्टव्याः ।
अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

4.3 आवश्यकपुस्तकालयानि&&पूरकज्ञानं डाउनलोड् कुर्वन्तु

!pip install moviepy librosa matplotlib numpy timm
  • 1

प्रयुक्तानां पुस्तकालयानाम् दस्तावेजीकरणलिङ्काः : १.
moviepy
लिब्रोसा(librosa पायथन् भाषणसंकेतसंसाधनस्य कृते अतीव शक्तिशाली तृतीयपक्षीयपुस्तकालयः अस्ति । अस्मिन् आधाररेखायां वयं मुख्यतया MEL स्पेक्ट्रोग्रामजननस्य स्पेक्ट्रोग्रामरूपान्तरणस्य च उपयोगं कुर्मः)
मत्प्लोट्लिब
नुम्प्य्
तिम्म्(प्रतिबिम्बवर्गीकरणप्रतिरूपपुस्तकालयः, शीघ्रं विविधानि सोटाप्रतिरूपाणि निर्मायताम्)

सोता इति किम् ? SOTA इत्यस्य पूर्णं नाम State of the arts इति अस्ति, यत् अस्मिन् क्षेत्रे सर्वोत्तमं प्रतिरूपं निर्दिशति । केषुचित् बेन्चमार्क-दत्तांशसमूहेषु SOTA अतीव उच्चं स्कोरं प्राप्नोति ।

Non-end-to-end model (pipeline): सर्वप्रथमं अस्माभिः अवश्यमेव अवगन्तव्यं यत् अन्तः किम् अस्ति । पारम्परिकयन्त्रशिक्षणप्रक्रियायां बहुविधमॉड्यूलः भवति, ये परस्परं स्वतन्त्राः भवन्ति उत्तरमॉड्यूलस्य परिणामः पूर्वपरिणामस्य स्तरस्य उपरि निर्भरं भवति, यत् सम्पूर्णं प्रशिक्षणपरिणामं प्रभावितं करोति
अन्त्यतः अन्तः प्रतिरूपं (अन्ततः अन्तः): सर्वप्रथमं भवद्भिः अवश्यमेव अवगन्तव्यं यत् भविष्यवाणी निवेशान्ततः निर्गमान्तपर्यन्तं उत्पद्यते अस्य भविष्यवाणीपरिणामस्य वास्तविकपरिणामेन सह तुलने त्रुटिः भविष्यति (तत् स्मर्तव्यम् यन्त्रशिक्षणस्य मूलकार्यम् अद्यापि अस्ति इतिशास्ति ), एषा त्रुटिः तंत्रिकाजाले प्रत्येकं स्तरं प्रति पुनः प्रसारिता भवति, तथा च आदर्शस्य भारः मापदण्डाः च तावत्पर्यन्तं समायोजिताः भवन्ति यावत् आदर्शः अभिसरणं न करोति, अथवा अस्माभिः अपेक्षिताः परिणामाः न प्राप्यन्ते यदि भवान् नियन्त्रणव्यवस्थायाः दृष्ट्या पश्यति तर्हि एषा निमीलितपाशनियन्त्रणप्रणाली अस्ति । (egBP तंत्रिका जालम्) २.
अनुक्रम-अनुक्रम (seq2seq): एतत् सामान्यम् अस्तिअन्ततः अन्ते यावत्अनुक्रम-अनुमान-विधिः, तस्य संरचना एन्कोडरः डिकोडरः च अस्ति यदि भवान् प्रश्नोत्तर-दत्तांशसमूहस्य उपयोगं एन्कोड्/डिकोड् कर्तुं करोति तर्हि भवान् प्रश्नोत्तर-रोबोट् प्राप्तुं शक्नोति ।

प्रश्नः पुनः Baseline इत्यस्मै एव गच्छति, Baseline इति किम्?आधाररेखा प्रायः सरलं सुलभं च कार्यान्वयनीयं आधाररेखाप्रतिरूपं निर्दिशति ।
एल्गोरिदम् ट्यूनिङ्ग् तथा पैरामीटर् समायोजनस्य प्रक्रियायां बेसलाइनस्य कार्यं भवति यत् मॉडलं उत्तमं उत्तमं च कर्तुं स्वस्य तुलनां स्वयमेव करोति ।

बेन्चमार्क अपि महत्त्वपूर्णा अवधारणा अस्ति, तस्य अर्थः अस्तिबेन्चमार्क . प्रायः एतत् एल्गोरिदम्, मॉडल् अथवा पद्धतीनां कार्यप्रदर्शनस्य मानकीकृतमूल्यांकनतुलनाविधिं निर्दिशति, यस्य उपयोगः आदर्शानां मध्ये भेदानाम् मापनार्थं भवति

भवन्तः तान् मॉडल् बेन्चमार्किंग् साइट् इत्यत्र बहुधा द्रष्टुं शक्नुवन्ति ।उदाहरणतयासि नन्

4.4 pytorch यादृच्छिकबीज&&CUDNN विन्यासं सेट् कुर्वन्तु

यदा अहं आधाररेखां चालितवान् तदा CUDA विन्यासदोषः अभवत् कृपया अन्यस्य Accelerator इत्यस्य उपयोगं कुर्वन्तु:

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

import torch
# 设置pytorch的种子
torch.manual_seed(0)
# deterministic当设置为False时,cuDNN将允许一些操作的非确定性优化
torch.backends.cudnn.deterministic = False
# benchmark设置为true允许cuDNN在每个前向传播中自动寻找最适合当前配置的卷积算法,以提高性能。
torch.backends.cudnn.benchmark = True
# 导入必要的库,我们需要用到cv2,glob,os,PIL
import torchvision.models as models
import torchvision.transforms as transforms
import torchvision.datasets as datasets
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.autograd import Variable
from torch.utils.data.dataset import Dataset
import timm
import time

import pandas as pd
import numpy as np
import cv2, glob, os
from PIL import Image
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

४.५ श्रव्य-दृश्य-पूर्वसंसाधनम्

Generate_mel_spectrogram विडियो सञ्चिकामार्गः, Mel आवृत्ति-छिद्रकस्य संख्या, सर्वोच्च-आवृत्तिः (गणित-स्पेक्ट्रम-परिधिं नियन्त्रयति), लक्ष्य-प्रतिबिम्ब-आकारः च इत्यादीन् मापदण्डान् स्वीकुर्वति

import moviepy.editor as mp
import librosa
import numpy as np
import cv2

def generate_mel_spectrogram(video_path, n_mels=128, fmax=8000, target_size=(256, 256)):
    # 提取音频
    audio_path = 'extracted_audio.wav'
    # video_path 应该是之前定义的变量,包含了要处理的视频文件的路径。创建了一个 VideoFileClip 对象,存储在 video 变量中。
    video = mp.VideoFileClip(video_path)
    # video.audio 访问视频的音频轨道。write_audiofile() 方法将音频写入文件。verbose=False: 设置为False表示不在控制台输出处理进度。logger=None: 设置为None表示不使用日志记录器。实际上我们做这个预测没有这样的需求,也就不消耗占存。
    # 其默认参数:write_audiofile(self, filename, fps=None, nbytes=2, buffersize=2000, codec=None, bitrate=None, ffmpeg_params=None, write_logfile=False, verbose=True, logger='bar')
    video.audio.write_audiofile(audio_path, verbose=False, logger=None)

    # 加载音频文件,加载采样率
    y, sr = librosa.load(audio_path)

    # 生成MEL频谱图(梅尔频谱图,与之相对应的有mel倒频谱图)
    # 默认参数:librosa.feature.melspectrogram(y=None, sr=22050, S=None, n_fft=2048, hop_length=512, power=2.0, **kwargs)
    # 参数解释:y:音频时间序列,sr:采样率,n_mels 是指在计算梅尔频谱图时,将频谱图划分为多少个梅尔频率滤波器(Mel filters),其决定了最终生成的梅尔频谱图的分辨率,也可以理解为梅尔频谱图的高度。
    S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=n_mels)

    # 将频谱图转换为dB单位,S:输入功率,ref:作为参考,如果是标量,则振幅 abs(S) 相对于 ref: 10 * log10(S / ref) 进行缩放。此处np.max指的是将谱图中的最大值作为参考值,这也是一种常用的参考值取法
    S_dB = librosa.power_to_db(S, ref=np.max)

    # 归一化到0-255之间,NORM_MINMAX:数组的数值被平移或缩放到一个指定的范围,线性归一化。
    S_dB_normalized = cv2.normalize(S_dB, None, 0, 255, cv2.NORM_MINMAX)
    
    # 将浮点数转换为无符号8位整型
    S_dB_normalized = S_dB_normalized.astype(np.uint8)

    # 缩放到目标大小256,256
    img_resized = cv2.resize(S_dB_normalized, target_size, interpolation=cv2.INTER_LINEAR)

    return img_resized

# 使用示例
video_path = '/kaggle/input/ffdv-sample-dataset/ffdv_phase1_sample/trainset/001b0680999447348bc9f89efce0f183.mp4'  # 替换为您的视频文件路径
mel_spectrogram_image = generate_mel_spectrogram(video_path)
  • 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

4.6 प्रशिक्षणदत्तांशपुटस्य निर्माणं कुर्वन्तु

!mkdir ffdv_phase1_sample
!mkdir ffdv_phase1_sample/trainset
!mkdir ffdv_phase1_sample/valset
  • 1
  • 2
  • 3

4.7 मेल स्पेक्ट्रोग्राम उत्पन्नं कुर्वन्तु

दत्तांशस्य परिमाणम् अतीव विशालम् अस्ति, अतः अहम् अत्र चित्रं न स्थापयिष्यामि तस्य स्थाने सामान्यपरिस्थितौ Mel आरेखं स्थापयिष्यामि:
अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु
चित्रस्य स्रोतः : १.सिमोन फ्रेजर विश्वविद्यालय
यदि भवन्तः तत् चालू कृत्वा शृण्वन्ति तर्हि क्रमेण न्यूनतां गच्छन्तं श्रव्यखण्डं भवति ।

# 使用glob.glob函数查找/kaggle/input/ffdv-sample-dataset/ffdv_phase1_sample/trainset/目录下前400个.mp4视频文件的路径。
for video_path in glob.glob('/kaggle/input/ffdv-sample-dataset/ffdv_phase1_sample/trainset/*.mp4')[:400]:
    mel_spectrogram_image = generate_mel_spectrogram(video_path)
    cv2.imwrite('./ffdv_phase1_sample/trainset/' + video_path.split('/')[-1][:-4] + '.jpg', mel_spectrogram_image)
# a. 调用generate_mel_spectrogram(video_path)函数生成梅尔频谱图,并将其存储在mel_spectrogram_image变量中。b. 使用cv2.imwrite函数将梅尔频谱图保存为JPEG图像。图像被保存在./ffdv_phase1_sample/trainset/目录下,并使用与原始视频文件相同的名称(但扩展名改为.jpg)。
for video_path in glob.glob('/kaggle/input/ffdv-sample-dataset/ffdv_phase1_sample/valset/*.mp4'):
    mel_spectrogram_image = generate_mel_spectrogram(video_path)
    cv2.imwrite('./ffdv_phase1_sample/valset/' + video_path.split('/')[-1][:-4] + '.jpg', mel_spectrogram_image)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4.8 AverageMeter तथा ProgressMeter परिभाषयन्तु

AverageMeter वर्गस्य उपयोगः चरस्य औसतं वर्तमानं च मूल्यं गणयितुं संग्रहीतुं च भवति ।

  • name: चरस्य नाम।
  • fmt: format string, स्वरूपितनिर्गमस्य कृते उपयुज्यते ।
  • reset(): सर्वाणि आँकडानि (val, avg, sum, count) रीसेट् करोति ।
  • update(val, n=1): आँकडानां अद्यतनीकरणं, val वर्तमानमूल्यं, n च मूल्यस्य भारः (प्रायः नमूनानां संख्या) ।
  • स्त्र(): वर्तमानमूल्यं औसतमूल्यं च समाविष्टं स्वरूपितं स्ट्रिंग् प्रत्यागच्छति ।
class AverageMeter(object):
    """Computes and stores the average and current value"""
    def __init__(self, name, fmt=':f'):
        self.name = name
        self.fmt = fmt
        self.reset()

    def reset(self):
        self.val = 0
        self.avg = 0
        self.sum = 0
        self.count = 0

    def update(self, val, n=1):
        self.val = val
        self.sum += val * n
        self.count += n
        self.avg = self.sum / self.count

    def __str__(self):
        fmtstr = '{name} {val' + self.fmt + '} ({avg' + self.fmt + '})'
        return fmtstr.format(**self.__dict__)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

प्रशिक्षणप्रक्रियायाः समये वर्तमानबैचसूचनाः सांख्यिकीयसूचकाः च निर्गन्तुं ProgressMeter वर्गस्य उपयोगः भवति ।

  • num_batches: बैचस्य कुलसंख्या।
  • meters: भिन्न-भिन्न-मेट्रिक-सञ्चयनाय प्रयुक्तानि AverageMeter-वस्तूनि समाविष्टानि सूची ।
  • prefix: निर्गमरेखायाः उपसर्गः ।
  • print(batch): वर्तमान बैचस्य सूचनां मुद्रयन्तु, यत्र वर्तमानबैचसङ्ख्या तथा प्रत्येकस्य सूचकस्य वर्तमानमूल्यं च समाविष्टम् अस्ति ।
  • _get_batch_fmtstr(num_batches): आउटपुट् संरेखणं स्वरूपणं च सुनिश्चित्य बैचस्वरूपतारं जनयन्तु ।
class ProgressMeter(object):
   def __init__(self, num_batches, *meters):
       self.batch_fmtstr = self._get_batch_fmtstr(num_batches)
       self.meters = meters
       self.prefix = ""


   def pr2int(self, batch):
       entries = [self.prefix + self.batch_fmtstr.format(batch)]
       entries += [str(meter) for meter in self.meters]
       print('t'.join(entries))

   def _get_batch_fmtstr(self, num_batches):
       num_digits = len(str(num_batches // 1))
       fmt = '{:' + str(num_digits) + 'd}'
       return '[' + fmt + '/' + fmt.format(num_batches) + ']'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

४.९ गहनशिक्षणं प्रतिरूपमूल्यांकनप्रक्रिया च (मुख्यबिन्दवः) ४.

validate कार्यं नियमितरूपेण प्रशिक्षणप्रक्रियायाः समये सत्यापनसमूहे मॉडलस्य कार्यप्रदर्शनस्य मूल्याङ्कनं करोति, तथा च Top-1 सटीकताम् गणयति मुद्रयति च

def validate(val_loader, model, criterion):
    batch_time = AverageMeter('Time', ':6.3f')# 批处理时间
    losses = AverageMeter('Loss', ':.4e')# 损失
    top1 = AverageMeter('Acc@1', ':6.2f')# Top-1准确率
    progress = ProgressMeter(len(val_loader), batch_time, losses, top1)# 输出ProgressMeter

    # switch to evaluate mode,eval()为评估函数,关闭训练时使用的一些特定层(如 Dropout),并启用 Batch Normalization 层的运行统计。
    model.eval()

    with torch.no_grad():# 定时设置requires_grad为False,防止梯度计算并节省内存。
        end = time.time()
        for i, (input, target) in enumerate(val_loader):
            input = input.cuda()# 将输入数据和目标数据转移到GPU计算
            target = target.cuda()

            # compute output
            output = model(input)
            loss = criterion(output, target)# 计算训练损失

            # measure accuracy and record loss,acc百分比显示
            acc = (output.argmax(1).view(-1) == target.float().view(-1)).float().mean() * 100
            losses.update(loss.item(), input.size(0))
            top1.update(acc, input.size(0))
            # measure elapsed time
            batch_time.update(time.time() - end)
            end = time.time()

        # TODO: this should also be done with the ProgressMeter
        print(' * Acc@1 {top1.avg:.3f}'
              .format(top1=top1))
        return top1
  • 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

पूर्वानुमानकार्यस्य उपयोगः परीक्षणसमूहे अनुमानं कर्तुं भवति तथा च बहुविधं भविष्यवाणीं कृत्वा औसतं कृत्वा आदर्शपूर्वसूचनानां स्थिरतां सुधारयितुम् परीक्षणसमयवर्धनस्य (TTA) उपयोगस्य समर्थनं करोति

def predict(test_loader, model, tta=10):
    # switch to evaluate mode
    model.eval()
    # TTA(Test Time Augmentation)
    test_pred_tta = None
    for _ in range(tta):# 执行 TTA 次数的循环,每次循环会生成一个略有不同的输入数据。
        test_pred = []
        with torch.no_grad():
            end = time.time()
            for i, (input, target) in enumerate(test_loader):
                input = input.cuda()
                target = target.cuda()

                # compute output
                output = model(input)
                output = F.softmax(output, dim=1)# 对模型输出进行 softmax 归一化处理,以获得类别概率。
                output = output.data.cpu().numpy()

                test_pred.append(output)
        test_pred = np.vstack(test_pred)
    
        if test_pred_tta is None:
            test_pred_tta = test_pred
        else:
            test_pred_tta += test_pred
    
    return test_pred_tta
  • 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

रेलकार्यं प्रतिरूपस्य प्रशिक्षणस्य, हानिकार्यस्य सटीकतायाश्च गणनां कृत्वा आदर्शमापदण्डानां अद्यतनीकरणस्य, पृष्ठप्रसारस्य अनुकूलनस्य च चरणानां करणाय च उत्तरदायी भवति

def train(train_loader, model, criterion, optimizer, epoch):
    batch_time = AverageMeter('Time', ':6.3f')
    losses = AverageMeter('Loss', ':.4e')
    top1 = AverageMeter('Acc@1', ':6.2f')
    progress = ProgressMeter(len(train_loader), batch_time, losses, top1)

    # switch to train mode
    model.train()

    end = time.time()
    for i, (input, target) in enumerate(train_loader):
        input = input.cuda(non_blocking=True)
        target = target.cuda(non_blocking=True)

        # compute output
        output = model(input)
        loss = criterion(output, target)

        # measure accuracy and record loss
        losses.update(loss.item(), input.size(0))

        acc = (output.argmax(1).view(-1) == target.float().view(-1)).float().mean() * 100
        top1.update(acc, input.size(0))# 更新 top1 计量器,记录当前批次的准确率。

        # compute gradient and do SGD step
        optimizer.zero_grad() # 清除之前累积的梯度。
        loss.backward()# 计算损失相对于模型参数的梯度
        optimizer.step()# 根据 backward() 计算的梯度更新模型参数。

        # measure elapsed time
        batch_time.update(time.time() - end)# 更新 batch_time 计量器,记录当前批次的处理时间。
        end = time.time()

        if i % 100 == 0:
            progress.pr2int(i)
  • 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

4.10 प्रशिक्षणस्य प्रमाणीकरणस्य च दत्तांशसमूहानां कृते लेबल् लोड् कुर्वन्तु

train_label = pd.read_csv("/kaggle/input/ffdv-sample-dataset/ffdv_phase1_sample/train_label.txt")
val_label = pd.read_csv("/kaggle/input/ffdv-sample-dataset/ffdv_phase1_sample/val_label.txt")

train_label['path'] = '/kaggle/working/ffdv_phase1_sample/trainset/' + train_label['video_name'].apply(lambda x: x[:-4] + '.jpg')
val_label['path'] = '/kaggle/working/ffdv_phase1_sample/valset/' + val_label['video_name'].apply(lambda x: x[:-4] + '.jpg')

train_label = train_label[train_label['path'].apply(os.path.exists)]
val_label = val_label[val_label['path'].apply(os.path.exists)]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

४.११ चित्राणि लोड् करणं चित्ररूपान्तरणं च

transform अनन्तरं दत्तांशवर्धनार्थं एकं पैरामीटर् त्यजति, पूर्वनिर्धारितं च None अस्ति ।
चित्रं RGB मोड् मध्ये परिवर्तितं भवति ।
लेबल् torch.Tensor इति रूपेण प्रत्यागच्छति।

class FFDIDataset(Dataset):
    def __init__(self, img_path, img_label, transform=None):
        self.img_path = img_path
        self.img_label = img_label
        
        if transform is not None:
            self.transform = transform
        else:
            self.transform = None
    
    def __getitem__(self, index):
        img = Image.open(self.img_path[index]).convert('RGB')
        
        if self.transform is not None:
            img = self.transform(img)
        
        return img, torch.from_numpy(np.array(self.img_label[index]))
    
    def __len__(self):
        return len(self.img_path)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

४.१२ प्रशिक्षणप्रक्रियायाः स्थापना (मुख्यबिन्दवः) ४.

उपरि सेट् कृतं FFDID वर्गं सन्दर्भयति ।

train_loader = torch.utils.data.DataLoader(
    FFDIDataset(train_label['path'].values, train_label['target'].values, 
            transforms.Compose([
                        transforms.Resize((256, 256)),
                        transforms.RandomHorizontalFlip(),
                        transforms.RandomVerticalFlip(),
                        transforms.ToTensor(),
                        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
        ])
    ), batch_size=40, shuffle=True, num_workers=12, pin_memory=True
)

val_loader = torch.utils.data.DataLoader(
    FFDIDataset(val_label['path'].values, val_label['target'].values, 
            transforms.Compose([
                        transforms.Resize((256, 256)),
                        transforms.ToTensor(),
                        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
        ])
    ), batch_size=40, shuffle=False, num_workers=10, pin_memory=True
)
# 重点:这里调用timm提供的resnet18模型,因为分类为0/1(真视频/假视频),可以在后续改进,比如换用更深的网络ResNet-34、ResNet-50或是其他变体
model = timm.create_model('resnet18', pretrained=True, num_classes=2)
model = model.cuda()

# 交叉熵损失,针对多类别
criterion = nn.CrossEntropyLoss().cuda()
# Adam优化器,学习率设置为0.003。
optimizer = torch.optim.Adam(model.parameters(), 0.003)
# 每4个epoch将学习率按0.85的因子进行调整。
scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=4, gamma=0.85)
# 初始化最优acc
best_acc = 0.0
for epoch in range(10):
    scheduler.step()
    print('Epoch: ', epoch)
	# 调用train函数
    train(train_loader, model, criterion, optimizer, epoch)
    # 调用validate函数
    val_acc = validate(val_loader, model, criterion)
    
    if val_acc.avg.item() > best_acc:
        best_acc = round(val_acc.avg.item(), 2)
        torch.save(model.state_dict(), f'./model_{best_acc}.pt')
  • 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

उत्पादनम् : १.

Epoch:  0
[ 0/10]	Time  6.482 ( 6.482)	Loss 7.1626e-01 (7.1626e-01)	Acc@1  35.00 ( 35.00)
 * Acc@1 64.000
Epoch:  1
[ 0/10]	Time  0.819 ( 0.819)	Loss 4.6079e-01 (4.6079e-01)	Acc@1  80.00 ( 80.00)
 * Acc@1 75.500
Epoch:  2
[ 0/10]	Time  0.914 ( 0.914)	Loss 1.4983e-01 (1.4983e-01)	Acc@1  97.50 ( 97.50)
 * Acc@1 88.500
Epoch:  3
[ 0/10]	Time  0.884 ( 0.884)	Loss 2.4681e-01 (2.4681e-01)	Acc@1  87.50 ( 87.50)
 * Acc@1 84.000
Epoch:  4
[ 0/10]	Time  0.854 ( 0.854)	Loss 5.3736e-02 (5.3736e-02)	Acc@1 100.00 (100.00)
 * Acc@1 90.500
Epoch:  5
[ 0/10]	Time  0.849 ( 0.849)	Loss 5.9881e-02 (5.9881e-02)	Acc@1  97.50 ( 97.50)
 * Acc@1 89.500
Epoch:  6
[ 0/10]	Time  0.715 ( 0.715)	Loss 1.6215e-01 (1.6215e-01)	Acc@1  92.50 ( 92.50)
 * Acc@1 65.000
Epoch:  7
[ 0/10]	Time  0.652 ( 0.652)	Loss 5.3892e-01 (5.3892e-01)	Acc@1  80.00 ( 80.00)
 * Acc@1 78.500
Epoch:  8
[ 0/10]	Time  0.847 ( 0.847)	Loss 6.6098e-02 (6.6098e-02)	Acc@1  97.50 ( 97.50)
 * Acc@1 81.000
Epoch:  9
[ 0/10]	Time  0.844 ( 0.844)	Loss 9.4254e-02 (9.4254e-02)	Acc@1  97.50 ( 97.50)
 * Acc@1 81.500
  • 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

४.१२.१ resnet18 मॉडल् इत्यस्य उन्नयनार्थं विचाराः

गहनतरजालम् : यदि भवान् उच्चतरप्रदर्शनस्य अधिकजटिलविशेषतानिष्कासनक्षमतायाः च आवश्यकता अस्ति तर्हि भवान् गहनतरजालस्य यथा ResNet-34, ResNet-50 अथवा अपि बृहत्तरं ResNetरूपान्तरं (यथा ResNet-101 अथवा ResNet-152) इत्यस्य उपयोगं कर्तुं विचारयितुं शक्नोति

अन्ये पूर्वप्रशिक्षिताः मॉडलाः : ResNet श्रृङ्खलायाः अतिरिक्तं अन्ये बहवः पूर्वप्रशिक्षिताः मॉडलाः चयनार्थं सन्ति, यथा :

EfficientNet: उत्तमं प्रदर्शनं पैरामीटर् दक्षता च अस्ति ।
DenseNet: सघनरूपेण सम्बद्धं संजालसंरचना विशेषतानां उत्तमतया उपयोगाय सहायकं भवति ।
VGG श्रृङ्खला: सरलं क्लासिकं च वास्तुकला, संसाधनबाधायाः अन्तर्गतं उपयोगाय उपयुक्तम् ।
कस्टम् मॉडल्: विशिष्टदत्तांशसमूहलक्षणानाम् कार्यापेक्षाणां च आधारेण, भवान् अनुकूलितं मॉडल आर्किटेक्चरं डिजाइनं प्रशिक्षितुं च विचारयितुं शक्नोति, यस्य कृते अधिकं त्रुटिनिवारणं प्रयोगं च आवश्यकं भवितुम् अर्हति

एन्सेम्बल-शिक्षणम् : प्रदर्शनं स्थिरतां च अधिकं सुधारयितुम् अनेक-माडल-तः भविष्यवाणीं संयोजयितुं बैगिंग् अथवा बूस्टिंग् इत्यादीनां एन्सेम्बल्-शिक्षण-विधिनाम् उपयोगं कर्तुं विचारयन्तु

हाइपरपैरामीटर् ट्यूनिङ्गः : मॉडलचयनस्य अतिरिक्तं, मॉडल् प्रदर्शनं शिक्षणदरं, बैच आकारं, अनुकूलकचयनं, आँकडावर्धनरणनीतयः च समायोजयित्वा अपि अनुकूलितं कर्तुं शक्यते

४.१२.२ हानिकार्यस्य चयनस्य सुधारः

भविष्ये हानिकार्यं सुधारयितुम् Dice Loss इत्यस्य प्रयोगं कर्तुं विचारयन्तु Dice Loss भविष्यवाणीपरिणामस्य लक्ष्यमास्कस्य च समानतां मापयति, तथा च स्पष्टसीमायुक्तानां द्विचक्रीयवर्गीकरणकार्यस्य कृते उत्तमम् अस्ति इदं हानिकार्यं यत् पिक्सेल-स्तरीय-पूर्वसूचने उत्तमं कार्यं करोति ।

Focal Loss इत्यत्र अपि दृष्टिः स्थापयन्तु। विशेषतया वर्ग असन्तुलनसमस्यायाः समाधानार्थं विनिर्मितः, कठिननमूनानां विषये ध्यानं दातुं सुलभवर्गीकरणीयनमूनानां भारं न्यूनीकृत्य अल्पसंख्यकवर्गेषु मॉडलस्य कार्यप्रदर्शने अधिकं सुधारं कर्तुं शक्नोति

४.१२.३ अनुकूलकचयनसुधाराः

RAdam एडम् इत्यस्य उपरि एकः सुधारः अस्ति यः शिक्षणदरसुधारस्य गतिशीलरूपेण समायोजनं कृत्वा स्थिरतां कार्यक्षमतां च सुधारयति।

AdamW एडम् इत्यस्य एकः प्रकारः अस्ति यः कार्यप्रदर्शनसमस्यानां समाधानार्थं भारक्षयस्य परिचयं करोति यत् एडम् केषुचित् सन्दर्भेषु प्रवर्तयितुं शक्नोति, विशेषतः यदा मॉडलमापदण्डानां संख्या महती भवति

AdamW एडम् इत्यस्य एकः प्रकारः अस्ति यः कार्यप्रदर्शनसमस्यानां समाधानार्थं भारक्षयस्य परिचयं करोति यत् एडम् केषुचित् सन्दर्भेषु प्रवर्तयितुं शक्नोति, विशेषतः यदा मॉडलमापदण्डानां संख्या महती भवति

४.१३ मूल्याङ्कनप्रतिरूपम्

# 用模型 (model) 对验证数据集 (val_loader) 进行预测。这部分假设 [:, 1] 给出了类别1的概率。
val_pred = predict(val_loader, model, 1)[:, 1]
# 赋值,预测的概率(或者预测值)赋给了 val_label 数据框中名为 "y_pred" 的列
val_label["y_pred"] = val_pred
  • 1
  • 2
  • 3
  • 4

४.१४ अन्तिमदत्तांशसमूहस्य एकीकरणम्

submit = pd.read_csv("/kaggle/input/multi-ffdv/prediction.txt.csv")
# 使用 merge 函数将提交文件 (submit) 中的数据与验证数据集标签 (val_label) 中的 video_name 和 y_pred 列合并
merged_df = submit.merge(val_label[['video_name', 'y_pred']], on='video_name', suffixes=('', '_df2'), how='left', )
# 将合并后的数据中 y_pred_df2 列(从验证集中获取的预测结果)的值填充到 y_pred 列中
merged_df['y_pred'] = merged_df['y_pred_df2'].combine_first(merged_df['y_pred'])
merged_df[['video_name', 'y_pred']].to_csv('submit.csv', index=None)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

५ उपसंहारः

आधाररेखायाः चालनं समाप्तुं १० निमेषाः न भवन्ति । परन्तु ५ घण्टानां रोगी अन्वेषणं भवति । अत्र मुख्यप्रक्रियाणां मौनसारांशः अस्ति ।

  • नमूनानां संख्यां गणयन्तु
  • श्रव्य-दृश्यवस्तूनि रचयन्तु
  • प्रशिक्षणदत्तांशसमूहं आयातयन्तु
  • श्रव्य-दृश्य-दत्तांशं आयातयन्तु
  • यादृच्छिक बीज/CUDNN सेट् कुर्वन्तु
  • श्रव्य-दृश्य-पूर्वसंसाधनम्
  • मेल स्पेक्ट्रोग्राम उत्पन्न करें
  • सत्यापनसमूहः, भविष्यवाणीसमूहः, प्रशिक्षणसमूहविधयः च परिभाषयन्तु
  • बिम्बरूपान्तरणम्
  • timm द्वारा प्रदत्तस्य SOTA प्रशिक्षणस्य, अनुकूलन-मूल्यांकन-प्रतिरूपस्य उपयोगं कुर्वन्तु

6. विस्तारं कुरुत

6.1 गहनशिक्षणस्य कार्यपरिभाषा

गहनशिक्षणस्य कार्यपरिभाषा वस्तुतः "पृष्ठप्रसारः" इति सारांशतः कर्तुं शक्यते, यतः तस्य मूलं परिभाषितहानिकार्यं न्यूनीकर्तुं आदर्शमापदण्डानां समायोजनाय पृष्ठप्रसार एल्गोरिदमस्य उपयोगः भवति

एतादृशानि श्रव्य-दृश्य-कार्यं सम्पादयितुं गहन-शिक्षणस्य उपयोगः अतीव उपयुक्तः अस्ति अहं मन्ये प्रथमं श्रव्य-दृश्य-दत्तांशस्य विशालः परिमाणः, एतेषां दत्तांशस्य जटिल-वर्गीकरणस्य आवश्यकता च।गहनशिक्षणस्य तन्त्रं निर्धारयति यत् अस्य कृते विशालमात्रायां दत्तांशस्य आवश्यकता वर्तते, वस्तुतः च अतीव महत्त्वपूर्णः बिन्दुः अस्ति यत् deeppfake इत्यस्य एव आवश्यकता अस्तिवर्गीकरणविचारः मूलतः वर्गीकरणकार्यं भवति, तथा च गहनशिक्षणस्य बृहत् आँकडामात्रायां परिष्कृतवर्गीकरणे च महत् लाभं भवति ।

द्वितीयं, सांख्यिकीयदृष्ट्या समानानि दत्तांशाः बृहत्मात्रायां निर्मीयन्ते, तथा च तत् विशालमात्रायां दत्तांशस्य वितरणं ज्ञातुं शक्नोति । विपरीतकार्यमपि कर्तुं शक्नोति ।

6.2 एआइजीसी तथा डीपफेक इत्येतयोः सम्बन्धः

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

एआइजीसी इत्यत्र डीप्फेक् इत्यस्य समावेशः करणीयः । विकासस्य दृष्ट्या AIGC इत्यस्य प्रसंस्करणशक्त्या सह Deepfake प्रौद्योगिक्याः विकासः आयामी च निश्चितरूपेण वर्धते अस्माकं वास्तविकस्य नकलीदत्तांशस्य विशालसमुद्रस्य सामना अवश्यं भविष्यति used for.If it can save कथानिर्मातृणां ऊर्जा साहित्यिकस्य कलात्मकस्य च मनोरञ्जनस्य विकासाय निःसंदेहं लाभप्रदं भवति यदि सा वञ्चनाय प्रयुक्ता भवति तर्हि शीघ्रमेव नैतिक-नैतिक-आव्हानानां सामना करिष्यति।

मम एकः विचारः अस्ति यत् यदि वर्तमानस्य लघुनाटकस्य उन्मादस्य सह संयुक्तः भवति तर्हि Deepfake जनसमूहं अति-कम-लाभस्य श्रव्य-दृश्य-मनोरञ्जनस्य अनुभवं प्राप्तुं समर्थं कर्तुं शक्नोति, परन्तु पारम्परिकं चलच्चित्रं दूरदर्शनं च उद्योगं अपि च कीदृशान् अभिनेतान् अपि च... श्रव्य-दृश्य-उत्तेजना मानवनेत्रयोः चर्चा। एषः विवादास्पदः विषयः अस्ति ।