ノンプログラマーのための画像生成備忘録~icrawler編~

ノンプログラマーのための画像生成備忘録~icrawler編~
=
# 目次
[1.はじめに](#1-はじめに)
[2.画像生成AIの種類](#2-画像生成AIの種類)
[3.画像生成AIを自分で作る意味って？](#3-画像生成AIを自分で作る意味って？)
[4.機械学習の流れ](#4-機械学習の流れ)
[5.学習させるための画像を集める方法](#5-学習させるための画像を集める方法)
[6.icrawlerの使い方](#6-icrawlerの使い方)
[7.AIで生成された画像の注意点](#7-AIで生成された画像の注意点)
[8.おわりに](#8-おわりに)

## 1. はじめに
皆さんこんにちは。
駆け出しプログラマーのパイタンです。
本日は巷で話題の画像生成AIについて記事をまとめてみました。
プログラミングの知識がほとんどない方や、Pythonを勉強したての方向けに画像生成AIの種類と、画像生成に必要な画像を集めるためのicrawlerについてご紹介したいと思います。
　Google社が無償で提供しているGoogle Colaboratoryを使うことでノンプログラマーの方でも比較的簡単に画像収集をすることができます。是非最後までみていただけると嬉しいです！

## 2. 画像生成AIの種類
はじめに、画像生成AIの種類について紹介します。
有名なものだと、以下のものが挙げられます。

・Stable Diffusion
・Midjourney
・にじジャーニー
・Canvaの画像生成AI

Stable Diffusionに関しては、Webサービスもしくはプログラミングの知識がある人は、ソースコードを使用してローカル環境やGoogle Colaboratoryでも使用することが出来ます。

Midjourneyとにじジャーニーは、ユーザー登録をした上でdiscord上で画像生成するためのワードを打ち込む必要がありますが、高クオリティの画像生成が出来ることと、生成のためのワード(通称呪文)がネット上やSNS上で共有されているため自分の希望通りの画像生成がしやすいのが強みと言えます。

Canvaの画像生成は無料アカウントでも使用できますが、先ほど紹介したAIに比べるとまだAIっぽさが感じられる画像が多いような気がします。

このように、プログラミングの知識がなくても画像生成をするサービスはあるので気になった方は是非チャレンジしてみてください。


## 3. 画像生成AIを自分で作る意味って？
ここからは画像生成AIを自分で作る意味について自分なりに考えていることをお話ししたいと思います。

先ほどご紹介したように、画像生成が出来るサービスが数多くということは無理にコードを書かなくても既存のサービスを使った方が楽で精度も高いですよね。

それに対して自分でコードを書いて画像生成AIを作る意味は3つあると思っています。
・特定の絵柄やイメージに特化したモデルを生成できる
・無料で使い放題
・勉強になる＆学び続ける意欲が増す
### 3.1 特定の絵柄やイメージに特化したモデルを生成できる
まず、特定の絵柄、例えば「ドラゴ〇ボール」風のテイストで鬼〇の刃のキャラクターの画像を生成したい場合、既存のサービスでは中々難しいのではないかと感じています。もちろん、呪文を駆使すれば生成できなくもないのでしょうが、画像生成AIにも苦手分野はあります。

例えば「泳ぐセフィロス」というイラストをAIに生成させるとこんな感じの画像が出てきます。
![q.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3303290/ded96c29-7fbb-7758-2d10-bcefdc304a5b.jpeg)
Image Credit : デオン / スクウェア・エニックス
URL：https://automaton-media.com/articles/newsjp/20221018-223199/
より引用

「今の時点では」AIは泳ぐという概念がイマイチ分かっていない、と捉えて良いと思います。
泳ぐということに特化して学習させる(泳いでいるイラストばかりを学習させる)ことで、特化型のモデルを作ることが出来ます。
特定のイメージに特化させる画像生成AIは、汎用的、もしくは二次元画像のように人気が高いジャンルでなければサービスとして提供される見込みは低いため、ニッチなイラストは自分のモデルで生成する価値があると言えます。

### 3.2 無料で使い放題
Midjourneyやにじジャーニーはトライアル期間が終了すると有料プランに入る必要があります。高いプランでも4,000円程度のため、作業工数や手間などを考えると払っても良い金額とは言えますが、「自分で好きなだけ使いたいんだ！」という人は自分でコードを書く意味があると言えます。

### 3.3 勉強になる＆学び続ける意欲が増す
こちらはPythonを勉強している人向けの話になります。Pythonをはじめとしたプログラミングは継続して勉強することに高い効果があるように思います。ですので、自分が興味のある分野について自分で調べてコードを書くことは勉強にもなり、学び続けるためのモチベーションにもなると考えています。

# 4. 機械学習の流れ
画像生成AIのための画像収集について説明する前に、一般的な機械学習の流れについて説明します。
機械学習は以下の流れで進めていきます。

1. データの収集
2. データクレンジング（余計なデータを省いて、モデルの精度上げる準備をすること）
3. モデルに学習させる
4. テストデータでモデルが画像生成できるかをテスト
5. モデルをWebなどに公開して使えるようにする

この後の記事は、はじめの一歩であるデータの収集について解説するものとなっています。
# 5. 学習させるための画像を集める方法
学習させるための画像収集には、いくつかの方法があります。
・Pythonのスクレイピングライブラリ(Beautiful SoupやSelenium)を使用する
・既に持っている画像を加工処理してかさ増しする
・Google Colabでicrawlerを使用する

icrawlerもPythonのライブラリではあるのですが、Beautiful SoupやSeleniumと比較するとPythonの知識がない人や勉強中の人でも使いやすいため分けて紹介しています。特段のこだわりがなければ、画像収集はicrawlerでやってしまって、コードの部分や変数の調整に時間を割いた方が良いかもしれません。

# 6. icrawlerの使い方
※コードの中身が分からない方は基本コピペして、[crawler.crawl(keyword='∀Gundam']のkeyword=の''クオーテーションマークの間の言葉を書き換えるだけで動くはずです。

いよいよ、コードが登場しますが順を追ってやっていけばつまづかずにやれると思います！

まずは、Google Colabを起動して以下のコードを打ち込みます。
素の状態だとicrawler（画像収集するための拡張機能）がインストールされていないので、Google Colabにインストールするためのコードになります。

```
# 1.必要な機能のインストール
!pip install icrawler
```

ちなみに、他のライブラリ(拡張機能)も pip install ライブラリ名と書くことでインストール出来るのでPythonに興味のある人は覚えておくと良いかと思います。
また、行頭に＃をつけることでメモを残すことが出来るのでこちらも覚えておくと便利です。
※#をつけないで書いてしまうと、エディター(パソコン)が理解できずにエラーを吐いてしまうので気を付けましょう。

次に、インストールしたライブラリから必要な機能を呼び出すためのコードが以下になります。
```
# 必要な機能の読込
from icrawler.builtin import BingImageCrawler
```
ライブラリは便利機能が詰まったフォルダだと思って問題ないかと思います。
ライブラリをインストールしただけだと、どの機能を使うか指定していないため自分のしたいことに合わせてライブラリから特定の機能を呼び出す必要があります。
ちなみに、今回のコードはBingになっていますがGoogle Chromeも使えます。ただし、Google Chromeの方がスクレイピングへの規制が厳しいらしく、Bingの方が画像を集めやすいようです。

次のコードが実際に画像をスクレイピングするためのコードになっています。

```
# 画像のダウンロード
bing_crawler = BingImageCrawler(downloader_threads=4,
                                storage={'root_dir': 'data'})
bing_crawler.crawl(keyword='∀Gundam', filters=None, offset=0, max_num=100)
```
bing_crawler.crawlのカッコ内keywordで取得したい画像を指定します。
max_numは最大で何枚画像を引っ張って来るのかを指定します。
※エラーが出てダウウンロード出来ないこともあるので欲しい数よりも少し多めに設定しておくのがミソです。

最後に、集めてきた画像をZipフォルダにまとめるコードが以下になります。

```
# フォルダのzip化
!zip -r /content/download.zip /content/data
```
実際に集めてきた画像の一部を掲載します。


![000012.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3303290/17fc65fa-074c-9943-f986-209c649dab9d.jpeg)
© 創通・サンライズ

私の指定方法が悪かったのか、∀ガンダムの画像よりも他のガンダムの方が圧倒的に多かったです。
![一覧.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3303290/a23c2c10-6481-5ccb-1927-62d1d6c004b3.jpeg)

※著作権に配慮してボカシを入れてます。

# 7.AIで生成された画像の注意点
AIで画像収集や画像生成にチャレンジされる方が注意すべき点があります。

 # そう、著作権です。

まず画像収集をする際は、収集した画像に著作権があるかどうかを気にする必要があります。
著作権があるものはSNSやブログで公開することは基本出来ません。公開したい場合は引用のルールに乗っ取って必要な情報を明記する必要があります。

また、画像生成をする際に著作権のある画像を使ってよいのかどうか？ということも話題になっているかと思います。結論から言うと、非営利目的、学習目的であれば「違法」ではないということのようです。

>2018年に改正された著作権法第30条の4では、「著作物に表現された思想または感情の享受を目的としない利用」については、必要と認められる範囲で、方法を問わず、著作物を利用することが認められるようになりました。
弁護士法人モノリス法律事務所より引用
https://monolith-law.jp/corporate/copyright-machine-learning

そして、もう一つ重要なのは「AIが生成した画像には著作権がない」というのが現時点での法の見解であるということです。

>日本の著作権法では、著作物というのは「思想または感情の創作的な表現」と定義されています。つまり、①「思想または感情」が、②「創作的に表現」されている、という2つの要件を満たしたものが「著作物」ということになるわけです。
では、この思想または感情というのは、誰の思想や感情なのか。ふつうに考えると人ですよね。現在の法律では「AIにも思想や感情がある」という扱いはされていませんから。
>だから、AIが自律的・自動的に作った作品については、「思想または感情」という著作物の要件を満たさないので、著作物ではない。つまり、著作権も発生しないということになります。これが現在の通説的な見解ですね。政府も同じ見解に立っています。
Workship MAGAZINEより引用
https://goworkship.com/magazine/ai-vs-copyright-1

恐らくですが、今後はAIが作った画像に対しても何らかの著作権を認めるような方向になるのではないかと思っています。理由としては、AIが作った画像を使って商品やサービスを展開している企業が既に複数あり、そうした際に同じ画像を使っていることから企業同士が揉めるケースが考えうるからです。

また、画像生成AIが作成した画像に著作権がないことを逆手にとって、「AIが生成した限りなく○○に近い絵柄のイラスト」を使って別なモデルを生成することで、著作権上の問題を搔い潜り商用利用できるようにするなど、色々と悪用することも出来てしまうような状態だとも感じています。

# 8. おわりに
最後の方が説教臭くなってしまって恐縮ですが、画像収集も画像生成もAIに任せることで簡単に自動でやってくれるようになります。いつの時代でも便利な道具を使ううえでは、使う側のモラルや倫理観が試されているのかもしれません。