AI Quest 2020 戦記
「その後、2022年」を追記しました。(2022年5月24日)
AI Quest とは
詳しくは以下のリンクを見ていただきたいのですが、経済産業省が、2019年6月に政府で決定した AI 戦略2019 に基づき、2019年度から「AI Quest」として講習を実施しているものです。実際の運営は、AI・データ分析コンペも主催しているSIGNATEさんが行っています。(下のwebページには私の写真も掲載されています。講習終了後にインタビューを受けました。)
講習の内容は、PBL(Project Based Learning)、つまり「課題解決型学習」で行われます。ですので、講義を受けるような受け身のものではなく、実際に自分でプログラミングをして与えられた課題を解く必要があります。少し大変ですが、とても勉強になりました。
私は、2020年末から行われたAI Quest 2020に参加しましたので、その内容について紹介します。
注)2021年も既に開始され、募集は終了しています。2021には、初参加者優先ということと内容が2020と同じようなものだったので、私は参加を見送りましたが、引き続き参加されている方もいらっしゃいます。
アセスメント(必須)
内容が内容だけに、ちゃんと学習プログラムについて来られるかどうかのアセスメントを受ける必要があります。これに合格しなければいけません。
アセスメントの内容は、AI・データ分析コンペと同じで、課題が与えられ、プログラムをつくって結果を投稿(サブミット)しなければなりません。
何もかもはじめて、という方は参加は難しいかもしれません。特にプログラミングスキルは必須です。ただし、参加基準はそれほど厳しくなく、サブミット成功してそこそこの成績であれば大丈夫ではないかと思います。私は真ん中くらいの成績でした。
最終的な参加者は、中学生から70歳までの700人程度となりました。コロナ禍ということもあり、Questは全てオンラインで行われます。
アセスメントの課題は、「民泊サービスにおける物件データを利用した宿泊価格予測モデルの作成」で、以下のデータが与えられます。最後の宿泊価格が推測すべきデータ、目的変数となります。
PBL開始
アセスメントが終了後、本番プログラムが開始されます。以下のようなPBLテーマが与えられますので、自分の参加したいPBLを選択します。PBL01〜PBL04が前半、PBL05〜PBL08が後半でそれぞれ一つずつ計二つが選択可能です。私は、画像認識をやりたかったので、前半はPBL03に参加しました。後半は画像以外にしたかったのですが、結果として選んだのはPBL07でこれは物体検知でやはり画像が対象になりました。
PBL01 需要予測・在庫最適化(小売)
PBL02 小売価格最適化(小売)
PBL03 不良箇所自動検出による製品作業効率化(製造)
PBL04 材料調達の最適化(製造)
PBL05 機械の予知保全(製造)
PBL06 データマーケティング(小売)
PBL07 加工内容の図面解析による自動見積り(製造)
PBL08 需要予測(製造)
前半戦 〜課題:不良箇所の検出(PBL03)〜
課題の内容
以下のような画像データが与えられます。画像はイメージで、実際に課題として与えられたものとは異なります。プリント基板だと思われます。
課題は、この基盤上の「はんだづけ」の良・不良を判定する、というものでした。はんだづけは、以下の4種類があるとされます。
つのはんだ(horn)
いもはんだ(potato)
ブリッジ(bridge)
レギュラー(regular)
つのはんだ、いもはんだ、ブリッジがあるものが、不良品となります。
これで識別できるのか?、という素朴な疑問
さて、このような課題初心者の私は第一感として、「これほんとに識別できるのか?」でした。私のそれまでの知識では、ディープラーニングでは「犬と猫」の識別ができる、くらいでしたので、基盤上のはんだづけはまず小さすぎて識別できないのではないか、でした。
それが大きな誤りであったことがわかります。
VGG16
まず主催者側からサンプルのコードが提供されます。もちろん独自のコードをつくっても問題ありません。
画像認識初心者の私は、とりあえず提供されたものを利用することにしました。これに独自の工夫を加えていくことになります。
提供されたコードには画像認識の畳み込みニューラルネットワークモデル(CNN)であるVGG16が組み込まれていました。
とりあえず騙されたと思って、提供されたコードを実行してみました。提供された画像には何も手を加えていませんが、なんとなくできているようです。
試してみた
なんでこんなことができるのか、疑問に思った私はあることを試してみることにしました。
VGG16とは、先の説明にもある通り、大規模の画像データセットで事前学習済み、ということです。VGG16は人間と同程度の1000ぐらいの対象物の識別が可能なように調整されています。画像データセットImageNetには当然様々な画像データが含まれています。
畳み込みニューラルネットワークを利用する場合、新規に与えられた画像データセットを再度学習し直す必要がありますが、予め学習されているので、新規の画像データを(学習し直さないで)そのまま識別させることも可能です。
では、与えられたプリント基盤画像1枚をVGG 16に認識させます。結果は以下の通りでした。
[[('n03777754', 'modem', 0.51629555),
('n04372370', 'switch', 0.12174057),
('n02978881', 'cassette', 0.12029024),
('n03492542', 'hard_disc', 0.08681973),
('n04548280', 'wall_clock', 0.026327418),
('n03706229', 'magnetic_compass', 0.017981378),
('n02708093', 'analog_clock', 0.014135082),
('n03602883', 'joystick', 0.0074036154),
('n06794110', 'street_sign', 0.0063191825),
('n07248320', 'book_jacket', 0.006107089)]]
これは、VGG16がプリント基板の画像をどのような物体の可能性があるか、その確度上位10位までを示したものになります。
1位は「モデム(modem)」、2位は「スイッチ(switch)」、3位は「カセット(cassette)」と続きます。四角いだけじゃねぇか、っていうものを選んだようです。この結果を見る限り、ImageNetには「プリント基板」も「はんだ」もないのではないのではないでしょうか?
これを再学習させるだけで、プリント基板上のごく一部でしかないはんだの状態を識別できるようになるのですから、世界が狂喜乱舞するのもわかるような気がしました。
このことは、Quest開催中に開放されたSlack上のコミュニティに投稿したところ、皆さんに面白がってはいただけましたが、私の疑問には答えていただけませんでしたね、仕方ありませんが。
こんな投稿を他にも繰り返したおかげで、このPBL03で「コミュニケーション賞」なるものをいただきました。
肝心の課題の方はあと一歩で入賞ならず。上位入賞はサブミット早いもん勝ち、というルールを知らなかったためです。
その他の工夫
主催者側からは予測精度を上げるための工夫として、データ拡張(Data Augumentation)を勧められました。
私は、やはり基板上のはんだの大きさを少しでも大きくしたいということから、基板の外側の不要な部分を切り取るために次のような工夫をしてみました。
入力画像のグレースケール化
グレースケールから2値可画像の取得
2値化画像から輪郭取得
輪郭を直線近似
直線近似した輪郭が一定以上の面積であれば輪郭に隣接する矩形を取得
隣接した矩形を切り出して表示
対象画像を2値化(白と黒)して輪郭を出してそれを矩形で囲うイメージです。この際、輪郭はゴミを拾う可能性があるので、なるべく最大のものを切り出すことにします。
輪郭の抽出は、2値化した画像に投げ縄を投げて引っ張った縄の形が輪郭になるようにイメージしていただけるとわかりやすいと思います。
ただ、この手法は当然のことながら、この課題か類似テーマでしか使えませんね。
以下が物体の輪郭を抽出したものになります。右下の円で囲んだところが、今回のいわゆるゴミの部分になります。
参加者とのオンライン会議
思いのほか楽しかったのは、参加者が集うオンラインの会議に参加できたことです。
会議といってもほぼ雑談で、参加者にはSEやっていたけど今は辞めて、石垣島(!)でカレー屋をやっている、という方がいました。思わず「そちらはコロナ大丈夫ですか?」と聞いたところ、「いやあ、昨晩3人ほど本島(沖縄でしょう)に搬送された。」と、大変そうでした。お客さんも結構来るようでしたよ、ここでなんとかAI活用してみたい、とおっしゃってました。
学生さんもいたので、就職どんなところ考えているのか聞いてみたところ、「AIに仕事奪われない職業」でした。結構切実な問題なのかもしれません。
後半戦 〜課題:図面解析による自動見積り(PBL07)〜
課題の内容
「見積り」とあったのでまさか対象は画像ではないだろうと選択したこちらのPBLは、やはり画像でした。
画像データは、以下のようなもので、もちろん実際に提供されたものとは異なります。
課題の目的は、この図面から切削穴を検出しその数を数え上げることです。検出する切削穴は「Circle」(円)、「Rectangle」(四角)、「Round rectangle」(長円)、「Triangle」(三角)の四種類です。
切削穴の形状とその数から工程と作業量を見積もる、ということなんだと理解しました。設計図面なので、余計な情報が書き込まれているのが厄介でした。
課題で提供された図面は切削穴が多い上、細かいので参加者の多分経験者からは、こんなに細かい加工は実際にはできない、というコメントもありました。
YOLOv3
例によって主催者から提供されたのは、物体検知アルゴリズムYOLO(You Look Only Once)v3でした。
Quest参加時点でのYOLOの最新版はYOLOv5で、成績上位者は皆YOLOv5を使っていました。現在YOLOの最新はYOLOXとなっています。
YOLOはGoogle ColaboratoryでGPU、TPUを使わないととてもやってられない上、Colab Proでない無料版を使おうとすると制限が多くて苦労されている方が多かったようです。
私自身はYOLOv3での検出が一回できたっきり以降全くうまくいかずそのまま時間切れとなってしまいました。
修了
レポートの作成
各PBLは仮想プロジェクトということになっているので、最後に成果報告書の作成があります。
プロジェクトの発注者がいて、そこに向けてプレゼンをする、ということを想定して資料を作成します。こちらは他の参加者からプレゼン資料を評価してもらいそれがそのまま成績になります。もっと客観的な評価をして欲しいとの意見もありましたが、主催者側が結構負担になりそうなので、これはこれでいいのではないかと思いました。無料の講座ですしね。
修了証
無事修了しました。終了後は修了証がいただけます。
その後、2022年
AI Quest2020は終了しましたが、その後、slackでの非常に弱いコミュニケーションが続いており、2022年に入り参加者から活動進展の報告がありました。
どれも素晴らしいと思いましたので、追記します。
(1)Women in Data Science SHIKOKU
AI Quest2020参加者の一人(女性)が香川県を拠点に女性のためのデータサイエンスの活動をスタンフォード大学の支援を受けて開始しました。詳しくはこちらのnoteの記事で。
スタンフォード大学Woman in Data Science (WiDS)については、こちら。
(2)スタートアップ誕生!
なんと、AI Quest 2020 の企業協働の活動の中から、スタートアップが誕生することになりました。
この記事で紹介した「後半戦 〜課題:図面解析による自動見積り(PBL07)〜」の画像検知のようなものが企業協働でも行われていたようです。私は企業協働には参加できませんでしたのであくまで推測です。
以下の引用の「私」は私のことではありません。念の為。
日本経済新聞
プレスリリース
株式会社REVOX
セルボット