見出し画像

AIで乃木坂"64"を錬成する試み:初心者がLightweight GANを用いて機械学習

はじめに

先日以下の記事で言及したUdemyのコース、"100days of Code"はその後細々と続けており、ついに最後20日間の自由課題の段階になりました。

Day92の課題は、好きなWebスクレイピング(ウェブサイトから情報を抽出するコンピュータソフトウェア技術)をすることだったので、任意のウェブサイトから画像を抽出し、これをLightweight GANと組み合わせて画像生成を行うことにしました。他のData Scienceの課題などに比べても、人に見せて楽しい成果が期待できます。

あらかじめ断っておくと、私は乃木坂46のファンというわけではありません(綺麗な方の多いグループだと思います)。今回乃木坂46を対象にしたのは、ファンサイトを通じて高画質で比較的大量のデータが取得できること、またデータ同士が似ていること(アジア系・女性・若年層・日本人に好まれる顔の系統の顔立ちのデータが同じサイズで取得できる)の2点で乃木坂46を画像生成の対象にしました。乃木坂46を増殖して、8*8(=64人)で乃木坂64を編成することが今回の目標です。

方法

必要な技術は①Webスクレイピング(学習に使う大量の画像収集)と②GANを用いた機械学習に分けられます。

①Webスクレイピングは100days of Codeでみっちり学んだBeautiful Soupを用いました。正直Beautiful Soupの使い方自体は難しくなく、私のようなプログラミング初級者でも簡単に扱えるツールだと思います。

ファンサイトのエケペディアさんから大体340枚程度の画像を取得しました。一覧のウェブページからはサムネイルの画質の低い画像しか取得できないので、これから実際の画像のリンクを取得するコードを組んでいます。

(30秒程度でこの量のデータがとれるのですが、あらゆる瑣末な事務作業に慣れた私としては、この速さに毎回感動してしまいます。)

import requests
from bs4 import BeautifulSoup
import re

response = requests.get('https://48pedia.org/%E4%B9%83%E6%9C%A8%E5%9D%8246%E3%83%97%E3%83%AD%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E7%94%BB%E5%83%8F#2017.E5.B9.B4')

soup = BeautifulSoup(response.content,'lxml')
idol_list= []

for link in soup.find_all("img"):
   if link.get("src").endswith(".jpg"):
       url= link.get("src")
       individual_url=f"{re.split('/', url)[3]}/{re.split('/', url)[4]}/{re.split('/', url)[5]}"
       full_url=f"https://48pedia.org/images/{individual_url}"
       idol_list.append(full_url)

print(idol_list)

idol_number=0
for person in images_list:
   rec = requests.get(person)
   with open('img/' + str(idol_number)+'.jpg', 'wb') as f:
       f.write(rec.content) 
   idol_number=idol_number+1

②GANを用いた機械学習については、まったくこれまでの授業でもカバーされているものではなかったため、一から学習する必要がありました。今回は主に以下のQiitaの記事のコーディングを利用しました。(コーディングは料理と同様、もちろん理論や基礎の技術を学ぶことは重要なのですが、それ以降はいかに出来合いでかつぴったりなコード(=レシピ)を検索するか、それをどのように組み合わせるかが重要だとの感触を得ています。)

結果

AIに6時間程度学習させた結果が以下の通りです。

画像1

画像2

画像3

よく見ると恐怖の谷になりますが、遠目で見れば許容できる範囲に仕上がったと思います!(ファンの方を不快にさせる結果でしたらすみません・・・)具体的なイメージを用いて、乃木坂という概念を抽象化し、これをあらたに具体化する試み、かなり興味深かったです。

(夫の手をかなり借りつつ)Lightweight GANはわたしのような初学者で問題なく使えるようなシンプルで美しいコードで作られているので、プログラミング初心者でもモチベーションを上げるために取り組まれることを推奨します!


この記事が気に入ったらサポートをしてみませんか?