オッサンはDesktopが好き

自作PCや機械学習、自転車のことを脈絡無く書きます

Deep Learning: pix2pixでピンぼけ画像を復元する

 こんにちは.

 前回*1に引き続き,pix2pixで遊んでみます. 今回はピンぼけ画像を鮮明化する,所謂,超解像のようなことをやってみます.

  1. 入力画像

 前回と同じトカゲの画像を使います.前回は黒いシミを画像に付加したのに対して,今回はボカしを加えます. 「ミディアン・フィルターをランダムに掛ける」とか色々考えたのですが,簡単のために,画像サイズを一度小さくして,再度256×256に戻すという処理にしました. 画像をどの程度小さくするか(下記ソース内のsize)を乱数で与え,学習の難易度を上げています.

images/resize_and_blur_image.py

# blur
blured = Image.new(img.mode, (256, 256), (255, 255, 255))
blured.paste(resized, (0, 0))
size = random.randint(32, 128)
blured = blured.resize((size, size), Image.LANCZOS)
blured = blured.resize((256, 256), Image.LANCZOS)
blured.save(directory + '/' + file + '_256_blot.jpg')

1. プログラム

 前回と全く同じです. 間違いがあった箇所だけ直しました. 全画像を一つのファイルにまとめて配置するconfigurate_data.pyに一行だけ追加しています.

 すみません. 前回のソースはそのままでは動きませんでした(汗).

configurate_data.py

import common as c

2. 学習結果

 (学習に使っていない)テスト画像を復元した結果です. ボカしていない元画像と比較したい方は,参照先を見てみて下さい.

f:id:changlikesdesktop:20200626141014p:plain:w600 f:id:changlikesdesktop:20200626142834p:plain:w600 f:id:changlikesdesktop:20200626142849p:plain:w600 f:id:changlikesdesktop:20200626142904p:plain:w600 f:id:changlikesdesktop:20200626142920p:plain:w600 f:id:changlikesdesktop:20200626142936p:plain:w600
左: ボカし画像,右: 復元画像
出典*2 *3 *4 *5 *6 *7

 何となく,顔周りが復元されやすい気がしました. 人の顔を復元するデモをよく見ますが,共通する特徴があると学習しやすいのでしょう. 今回は単純に「トカゲが写っている写真」を解析しましたが,例えば,「トカゲの顔のアップ」といった限定条件をつければ,復元性能がよりアップすると思います.

3. むすび

 面白いですね. 前回,監視カメラの画像を鮮明化して「この顔見たら110番」という話をしましたが,冗談ではなく実現できそうです. 既にやられているんでしょうね...

 Deep Learningは「こめかみにホクロがある」といったクリティカルな特徴までを復元することはありません. しかし,ある程度は統計的に,安定した動きをする筈です. 一方,人の目撃証言は曖昧ですが,「この人に間違いない」と確信するようなアテンションを伴っていたりします. ヒトとAIの特徴を捉え,うまく共存していくことが重要そうですね.

 ソースは前回と同じ場所に,ボカし処理用のresize_and_blur_image.pyを追加する仕方でアップしています*8