
【情報I: プログラミング】ディープラーニングで物体認識
本noteは, 情報Ⅰの教材シリーズ第三弾です.
読者の皆様は, 多かれ少なかれ, 高校の情報I&Ⅱやプログラミング教育に関心がある方だと思われますので, こちらのnote(前作)も合わせてご覧ください.
"ディープラーニングについての知識がない"
"プログラミングが難しくて, なかなか手が出せない."
本noteでも, このようなお悩みに応えるべく, 全国どこの教室でも, カメラ付きのデバイスとGoogle Colabだけで行えるように題材を作成いたしましたので, チェックしていただければと思います.
ディープラーニングで物体認識にチャレンジしよう!
【目的】
畳み込みニューラルネットワークを用いたディープラーニングを体験し, プログラムに物体認識させる体験を積み, また自らモデルを構築しようとする姿勢を身につける.
【注意】
前提: 本noteはGoogle ドライブの利用を前提としています.
1) ここで用いる画像は, 著作権等に考慮し, 自ら撮影した写真や, 事前に生成AIなどで生成した画像, あるいはクリエイティブコモンライセンスを確認した画像を用いることが教育上望ましい.
2) ChatGPTのAPI利用に関しては, 費用はAPIキー発行者に請求されます.APIキーを公開してしまいますと, 悪用されてしまいますので, 絶対に公開しないようにしてください.
APIキーの発行に関してはこちらのnoteを参考にしてください.
【準備】
まずはこちらのGoogle Colabノートをマイドライブにコピーしてください。
1) まずはChatGPT-4-turboを使えるように, 取得したAPIキーを"あなたのAPIキー"にペーストしましょう.

そのあとは, 実行して適宜ChatGPTに質問するだけです.
このColabノートは生徒への展開を前提にした作りのため, 分かりやすくColab上で質問できるようにとこのような仕様にしました.
例えばこんなふうに, わからないことが出たら聞いてみましょう.

2) 次にGoogle ドライブをマウントしましょう.
マイドライブにこのColabノートに必要な素材を格納するフォルダ作成.
そのフォルダ名をパスの「フォルダ名」の部分に記載してください.

こちらは実行してアカウント認証すれば難なく進むはずです.
そのままライブラリの設定も実行しましょう!
3) マイドライブに作成したフォルダの中に, 物体認識モデルに認識させたい画像を保存しましょう.
「ファイル名.jpg」の部分にそのファイル名に変えて実行しましょう.
すると画像がColab上に読み込まれます.
私はfrog.jpgにしました.

4) そのあと, 物体認識をしてみましょう!
このコードを実行します.

結果が下部に表示されます.
該当する項目が, 確率が高いものから順に表示されるように組んであります.
ここではバッチリ, カエルであることがわかります.
(DALL-E-3で作成した画像のため, 架空のカエルであることはご容赦ください.)
5) 特徴マップの可視化をしよう.
読み込んだ画像は今回はカエルでしたが, モデルが学習しているカエルの特徴量に該当する部分を指定の階層でマッピングしてくれます.

ディープラーニングによって物体認識のための特徴量がどのように重み付けされているのか, 視覚的理解に役立ちます.
6) 今度は, Teachable Machineで実際に物体認識モデルを作成します.
Teachable Machineと検索し, アクセスしましょう.

使ってみるをクリックし, 新しいプロジェクトを作成しましょう.
画像プロジェクトをここでは選びます.

標準の画像モデルを選びます.

判定させる物体の名前を入力し, 200枚程度写真を撮りましょう.
ここではスマホとコーヒーを判定させるモデルを作成します.

ここで物体認識させたい数に指定はないですが,授業の運営上, 3つほどで良いと思われます.
撮影が終わりましたら, トレーニングをクリックしましょう.

トレーニングが完了したら, カメラに写っている物体をスマホだと認識できていることがわかります.
ここで認識が甘ければ, トレーニングをしなおしましょう.
背景が白い場所で認識させたり工夫しましょう.

良いモデルが出来上がればエクスポートしましょう.
今回はTensorflowのKerasを選びましょう.

モデルのトレーニングまでならば, このサイトだけで完結できますが, せっかくですからトレーニングしたデータを用いて, プログラムで動かすところまで体験させてあげたいですよね.
7) ダウンロードして解凍した「keras_model.h5」と「labels.txt」を先ほどのマイドライブに作成したフォルダにアップロードしましょう.

8) プログラムを実行して, カメラで撮影(capture)した画像がモデルによって判定されていることを確認しましょう.

このように「コーヒー」とその推定確率が出ていたらOKです.

もしどこかでエラーが出る場合は, ファイル名が違っていたり, フォルダ名が違っている可能性がありますので確認してみてください.
まとめ
さて, 本noteでご紹介した順に作業をしていただきますと, 畳み込みニューラルネットワークを用いたディープラーニングをさせる体験をしていただけます.
生徒さんにも同様の手順で機会を創出していただければと思います.
これらの理論を理解させるのは, プログラムで遊んでからが望ましいと思います.
実際には, もっとたくさんのテストデータを作って, モデルの評価をしたりしますが, 今回はビギナーの方向けに割愛しました.
高校情報Ⅱに該当するプログラムの内容ですが, 実行するだけで体験していただけますので, プログラムの内容に興味を持ったら, 上部のChatGPTと適宜対話を重ね, アレンジしたりしていけたら良いですよね.
最後に注意事項ですが, APIキーは定期的に更新したり, 削除したりすることをお勧めします.
そういった認証情報の管理についても, 生徒に紹介するチャンスですので, 授業をマネージする側の皆様も, 今回の題材を機に教材をアレンジしてみてください.
良い授業実践事例が出ましたら, ぜひコメントでお知らせいただけますれば幸いです.
今後も, 情報1&Ⅱに関するnoteをアップしていきますので, もしよろしければフォローをお願いします.
ありがとうございました.
田中善将への仕事依頼やSNSフォローはこちら
講演・執筆・コンサルティングのお仕事依頼はこちらまで.
Xはこちら.
教育関係者の皆様は, Facebookでも繋がってください.
いいなと思ったら応援しよう!
