AI_ML_DL’s diary

人工知能、機械学習、ディープラーニングの日記

Deepfake Detection Challenge - 4

Deepfake Detection Challenge - 4

Identify videos with facial or voice manipulations

 

*本日の予定:ミニモデルを作り始めよう。

 

*スコアの計算ができるようにしよう。

・jupyter notebookを立ち上げて、計算式をつくる。

・自分で式をつくっていたが、scikit-learnにあった。

>>> from sklearn.metrics import log_loss
>>> y_true = [0, 0, 1, 1]
>>> y_pred = [[.9, .1], [.8, .2], [.3, .7], [.01, .99]]
>>> log_loss(y_true, y_pred)
0.1738...
sklearn.metricsには、Classificationだけでも、これだけある。

‘accuracy’

metrics.accuracy_score

 

‘balanced_accuracy’

metrics.balanced_accuracy_score

 

‘average_precision’

metrics.average_precision_score

 

‘neg_brier_score’

metrics.brier_score_loss

 

‘f1’

metrics.f1_score

for binary targets

‘f1_micro’

metrics.f1_score

micro-averaged

‘f1_macro’

metrics.f1_score

macro-averaged

‘f1_weighted’

metrics.f1_score

weighted average

‘f1_samples’

metrics.f1_score

by multilabel sample

‘neg_log_loss’

metrics.log_loss

requires predict_proba support

‘precision’ etc.

metrics.precision_score

suffixes apply as with ‘f1’

‘recall’ etc.

metrics.recall_score

suffixes apply as with ‘f1’

‘jaccard’ etc.

metrics.jaccard_score

suffixes apply as with ‘f1’

roc_auc’

metrics.roc_auc_score

 

roc_auc_ovr’

metrics.roc_auc_score

 

roc_auc_ovo’

metrics.roc_auc_score

 

roc_auc_ovr_weighted’

metrics.roc_auc_score

 

roc_auc_ovo_weighted’

metrics.roc_auc_score

・y_trueは、0か1であるが、y_predはどう表現するのか。

・結果は、log-lossの数値が小さいほど良い。

・log-lossは対数なので、予測結果を、真が偽かで、全て0か1にしてしまうと、それが間違っている場合には、かなり大きな値になってしまうようだ。

・evaluationの説明のところで、そのように書いているように思う。

・ここは、考えどころかもしれない。

 

*データベースの内容を確認する。

・小さいデータベースをダウンロードした。

・次に、大きな訓練用データベースの50分の1をダウンロードした。

・trainデータのfake, trueのテーブルを、pandasで確認した。

・横長で見づらかったので、transpose()で、縦に変換した。

 meta = pd.read_json(metadata).transpose()

 

*次は、動画(mp4)を読み込もう。(動画を扱うのは初めてなので手間取るかも)

・ 何を使えばいいのかな。

・やっぱり、cv2、かな。

・指定したファイルパスの動画の読込:cap_video = cv2.VideoCapture(path_video)

・動画の枚数:cap_video.get(cv2.CAP_PROP_FRAME_COUNT)

・動画のサイズ:

 幅:cap_video.get(cv2.CAP_PROP_FRAME_WIDTH)

 高さ:cap_video.get(cv2.CAP_PROP_FRAME_HEIGHT)

・numpy配列に読み込む:ret, frame = cap_video.read()

 

*明日は、400の動画から、各10枚の静止画像を抽出し、fakeファイルとtrueファイルに名前を付けて投げ込む。

・それがうまくいけば、次に、この2種類の画像をCNNで分類できるかどうか、試してみる。

・ここまでが第一ステップとなる。

 

つづく 

 

f:id:AI_ML_DL:20200216085455p:plain

style=107 iteration=1

f:id:AI_ML_DL:20200216085628p:plain

style=107 iteration=20

f:id:AI_ML_DL:20200216085721p:plain

style=107 iteration=500