（３）「簡単な技術紹介」と「作ったアプリ」の詳細について

改めまして読んで頂き有り難うございます。
長々書きましたが今回でアプリ作成のブログは終わりです。

まずは、
今回の「AI WEBアプリ開発」で学んだ主な内容の説明です。


<h1>１：今回習った「主なトピックス」の簡単な技術概要</h1>

<h4>（１）Python について</h4>

今回「AIアプリ開発」で使ったプログラミング言語は「Python」です。

初めてプログラミング言語を学びましたが、
すごく汎用性が高いだけあって素人でも学びやすい言語でした。


———————————
自分の感覚的には「スーパーファミコン」的というか。

Python ＝　スーファミ本体　＝　本体だけだとゲームできない　

Python ＋　ライブラリ（スーファミのカセットみたいなもの）＝　色々遊べる　

的な。

（※ あくまで個人のイメージです。）
———————————

「ライブラリ」には当然色々種類があって、

<b>【計算ライブラリ】</b>

NumPy（ナンパイ）：計算が最強にできる
Pandas（パンダス）：表やグラフに表すのが得意

<b>【人工知能ライブラリ】</b>

機械学習のアルゴリズムが格納されているライブラリ

scikit-learn（サイキットラーン）
Tensorflow（テンソルフロー）

<b>【WEBアプリフレームワーク】</b>

実際のPythonのAppをWEB上に公開できる

Flask（フラスク）：軽量級アプリをアップ
Django（ジャンゴ）：重量級アプリをアップ


物理筐体のスーファミを違うところは、

用途に合わせて「ライブラリ」は何個も同時に組み合わせて使って
「最終的な目的」を達成するところです。
（RPGのキャラの装備と一緒ですね）


これが組み合わさって社会が出来てるのかーと
思うと結構不思議な感じがしました。


主なPythonの使い方手順を（ざっくりと）まとめると


１：【作る】

「Visual Studio Code」など「ソースコードエディター（コードを書く場所）」を
使って「使いたい機能のコードを書く　＝　作る　＝　開発する」

２：【使う】

「作ったコード」を実行する

これだけです。

———————————
実行の仕方は例えばですが、

PCの「CLI（コマンドラインインタプリタ）」
（コマンドプロンプトとかターミナルとか　→　黒い画面に文字がいっぱいのやつ）

で「作ったPythonファイル」を「コマンドで実行」させる事ができます。

もし、Pythonファイルで
「このフォルダの中の全部の写真をこの大きさにして、このフォルダに全部入れてね！」
と書いて、コマンドプロンプトで「コマンド実行」するとそれをパッと自動でやってくれる

という感じです。
———————————


<h4>（２）ディープラーニングについて</h4>

———————————
人工知能とは

人工的につくられた人間のような知能、ないしそれをつくる技術

東京大学大学院工学系研究科 人工物工学研究センター
日本ディープラーニング協会 理事長
松尾　豊　先生
———————————

人工知能そのものはかなり広い定義の言葉であるようで、

ある種のセンサー（自動で電気が付くとか、自動制御の家電とか）から
自動運転車　や　バーチャルアシスタント　まで

レベルも段階もごちゃごちゃに
みんな人工知能と括られているのが現状のようです。


その上で、

———————————
機械学習とは

人工知能という「言葉（定義）」の中の一部です。

世の中の特定の事象について<b>データを解析</b>し、その結果から学習して、
<b>判断や予測を行う</b>ためのアルゴリズムを使用する手法

NVIDIA社　HPより

https://blogs.nvidia.co.jp/2016/08/09/whats-difference-artificial-intelligence-machine-learning-deep-learning-ai/

機械学習は言葉の通り「機会（マシン）」を「学習（トレーニング）」します。

このメールは「スパム」という学習　＝　スパムメールの振り分け機能

このWEBサイトは「質が低い・質が高い」という学習　＝　ネット検索・結果表示の機能

———————————

その機械学習を

2012年に画期的に躍進させた技術が
「深層学習（ディープラーニング）」です。

松尾豊先生の著書
『人工知能は人間を超えるか』

https://www.amazon.co.jp/人工知能は人間を超えるか-角川ＥＰＵＢ選書-松尾-豊-ebook/dp/B00UAAK07S

では

”ディープラーニングに代表される「特徴表現学習」は
黎明期の革新的な発明・発見に匹敵するような大発明”
（５章より抜粋）

と評しています。


一般人の感覚からすると、
「ガラケーからスマホになった」という感じでしょうか。


で、
———————————
深層学習（ディープラーニング）とは

機械学習という「言葉（定義）」の中の一部です。

生物の神経細胞の仕組みを模したアルゴリズム”ニューラルネットワーク”の
利用が主流の、いま最も高い精度が出やすい機械学習


では、

今までと何が違うの？
と言うことですが、

要約すると「特徴を学習できる事」になります。
———————————

例えば、
りんご、犬、猫なんでもいいのですが

今までは犬の画像を学習しても「１ミリずれた犬の画像」は
犬とわからなかった

１ミリも狂いのない全く同じ画像なら「犬」と判断できます。

なぜなら「特徴表現」を掴んでいるわけではないから。

ただ、
ディープラーニングなら「特徴」を掴めます。

だから、

学習したのとは「別の犬の画像」でも「犬」とわかる。
判断できる。


また同じように

・ベルトコンベアを流れるパーツでも（不良品検出）
・クレジットカードの番号でも（個人情報流出防止用検出）

学習すれば「特徴」を掴むから応用の幅が広い
と言うわけです。



<h4>（３）CNNについて</h4>

で

今回「AI　画像識別 WEBアプリ」を作るにあたって、

ディープラーニングの中の一つの技術として使ったのが

CNN（Convolutional neural network）
「畳み込みニューラルネット」

という手法です。

主に「画像識別の分野」で高い性能を発揮し使われています。




ざっくりと説明すると、

写真は「点（ベクトル）」の集まりです。

マス目上のベクトルが並んだ写真の上から下まで
１個ずつの点を順々に追っていくと「点がある・点がない」しかわかりません。

そこで

１：マス目上の写真を分割して（16分割でも、32分割でも）面で順々にどんな画像かを読み取ります。
＞画像の中の「特徴量」の分布を調べます。

２：読み取った画像を圧縮してデータ量を削減します。
＞「読み取った特徴」の中の「無駄な部分」を省いて軽くします。

３：１と２を交互に繰り返して「層」にします。
＞ミルフィーユ的な感じです。


画像の中にどのような特徴があるかは、自動的に抽出されます。


今回は「教師あり学習」と言って、

こっちの画像が「A」だよ

こっちの画像が「B」だよ


と予め「答えを付けて画像を読み込ませ」＋「学習（トレーニング）」

を行って、

完成した「AI学習モデル」に
AやBの画像を渡して「分類」させるということをやりました。

———————————————————————————
<h1>２：今回作ったWEBアプリと感想</h1>

———————————————————————————
<h4>（１）＜ボタン電池の識別アプリ＞</h4>

https://masa2021-battery-testapp.herokuapp.com

普通にコンビニとかでも売っている、
「ボタン電池（CR2016・CR1632）」の識別アプリです。

このアプリを作る時に考えたのは、
「目が見えない人（弱視とか）ってボタン電池とかわかりずらい」のではないか。

という事でした。

あともう一つは、

WEBから画像を集めるのではなくて
自前で画像を用意して学習させるのをやってみたいなと思いました。

工業製品など「規格」が決まっているモノに関しては、
自分で作った方が早いだろうと考えたんですね。

で、

そのまま「ボタン電池だけ」写真撮っても
画像から「違い」を判別するのすごい難しいだろうと思い、

「白い紙の上に横に十円玉を置いて撮影する」という形式にしました。
そうすれば十円玉が「ものさし」の代わりになるので精度が上がるだろうという算段です。

サービスとしては縛りをつける方がユーザーは使いづらいですが、
ものによっては「安価」にサービスを作れる方式かもしれないなと感じました。

精度も94％まで出たので、そこそこ良いのではないかと感じました。


デメリットというか、
めんどくさかったのは

スマホカメラで撮影したのですが、
スマホカメラの性能が良すぎて「画像を小さくする（加工する）」のに結構苦労しました。

PC性能が家庭用なので、
どうがんばっても数千枚の高画質画像を一気に処理するのは不可能でしたので、
コツコツがんばった次第です。。。

———————————
<h4>（２）＜龍涎香（りゅうぜんこう）識別アプリ＞</h4>

https://masa2021-stone-testapp.herokuapp.com


龍涎香（りゅうぜんこう）って知ってますか？

鯨の体内で作られる結石化した石で、
香料として高額で取引されています。


水に浮くので岸に流れ着くらしいのですが、前にタイの漁師さんが海辺で拾って、
鑑定の結果「本物だったので数億」で売れたとネットニュースとかでやっていたのを見て

マジか海にはすごいもんが落ちてるな


と、
記憶に残っていたのですね。


とりあえずあったら役に立つものってなんだろうと思って、
思い出したので遊びで作ってみました。


これを作って思ったことは、


自分自身が龍涎香（りゅうぜんこう）を見た事がないので、
WEB上にアップされてるモノが確かに「本物」と確証できない場合、

「正解ラベル」そのものが
「結構まちがってるんじゃね？（普通の石の画像も混ざってるんじゃね？）」という

疑惑付きのモデルが完成してしまうんですよね。

だから、
正解ラベル自体に「信用性」を担保させる仕組みは
本当に「良いモデル」を作る場合にどうしても必要だと感じました。

あとは、

「不正解ラベル」も
なんとなく龍涎香っぽい普通の石をピックアップはしたのですが、

地域とかによって海に落ちている石って
結構「異なる」と思いますので

その場所場所に応じた「不正解ラベル」もリサーチして作らないと、
使えるものに高めることは難しいように思いました。


———————————
<h4>（３）＜ヒアリの識別アプリ＞</h4>

https://masa2021-ants-testapp.herokuapp.com


何か世の中のためになるものって出来んのかなと思って、
これはおまけで作ったのですが、結論から言うと完全に失敗でした。。。

小さい生物の識別モデルはマジ難しいなーと痛感したモデルです。


ヒアリはニュースとかで見たことある方も多いと思いますが、
特定外来生物に指定されている「毒を持った危険なアリ」です。

（世界中に生息していて、
水際で侵入を阻止出来たのは世界で「ニュージーランド」のみらしいです。）


で、

そもそも識別アプリを作っても、
毒を持った危険なアリを一般人がスマホで接写したらダメだろう。。。。

というのがアプリを作った時に思ったことでして。。。。


その上で、

ちゃんと使えるアプリにするなら

１：リアルなヒアリの画像を

２：スマホで安全に撮れる位置で撮って

３：その画像を「正解ラベルの教師データ」に使わないと

意味ない


と言うのが結論です。


使用者が実際に使う状況を想定して作らないと、
役に立つものにはならんなとすごく感じた次第です。



———————————————————————————

<h1>３：終わりに</h1>

本当に長々と読んでいただきありがとうございました。


最前線のエンジニアになることは流石に無理だと思いますが、

すごくエキサイティングな時代ですので、
色んなことを学び

その知識や経験が人の役に立ったらいいなと思っています。


余談ですが、
趣味で読書ブログもやってます。
よかったら覗いてみてください。

https://note.com/suzuki_masaomi


ではではー。