はじめに
月一でアウトプットを出そうと心がけているのですが、今月は忙しかったのでただの駄文です。
失敗物語
昔の自分と今の自分
数年前。私はyoloのデモを見て、物体検出AIそのものではなく画像の上に四角形や文字を描く手法に興味を抱いた。
yoloの公式サイトにあるこの画像で。
往年のBASICにはLINE
やCIRCLE
といったコマンドがあり、それを使って拙いCGを描いたことがある。それゆえにAIではなく、バウンディングボックスの出力形式でもなく、イマドキの言語であるPythonにおける図形描写に興味が移ってしまったのだった。
そして今。OpenCVを知ってからはそれを使った小物を作って公開している。
- OpenCVでリサイズ・モザイク・顔検出、ときどき象印
- OpenCVで日本語フォントを描写する を関数化する
- OpenCVで透過画像を扱う ~スプライトを舞わせる~
- 投影変換で画像を変形する ~モニタ画面をハックする~
- OpenCVでラスタースクロールする
などなど。いくつかの投稿については多くのLGTMをいただき、たいへんありがたいことである。
Python講座にて
会社のPython講座に参加した。openpyxlによるExcel操作などを経て、第4回となる今回はとうとうディープラーニング。
『ゼロから作るDeep Learning』を買って分類器を作って、分類以外の活用方法が思いつかなくてそれ以来ずっと放置していた自分に活を入れるいい機会だ。
画像分類のネタは柿ピー。柿の種とピーナツ、そして製造業ゆえ異常検知を想定して割れた柿の種も含めた3種類を分類するというもの。真面目過ぎず不真面目すぎず、いい塩梅の題材だ。
会社でAIを活用するにあたり「AIがこう言ってます、なぜそう判断したのかはわかりません」では上司を納得させることはできない。今回の講座は短時間だがGradCAMでAIがどこを注目しているのか可視化することも含んでいる。
最初に用意された画像は多くなく、kerasのtarget_size
も小さく取っていた。
これで得られたAIは数少ないテスト画像の中では正しい答えが得られたが、GradCAMはAIが画像端など対象物と無関係な場所を注目していることを示していた。これではよろしくない、次はデータ拡張だ。
講師はCNNのプログラムとは別に画像を回転したり反転したりして画像を水増しするプログラムを用意していた。
画像データをリストにぶっこむ直前にメモリ上で画像水増しをすればいいじゃんというのは教える立場にない者の無責任な考え。これは勉強会だから、実際に回転したり反転したりした画像が作られたことを確認し、そのうえでさっきと同じプログラムを走らせるのが常道だ。
だが水増しの段階でエラーが出たという声が複数上がった。水増しされた画像を保存するcv2.imwrite()
の行で。
そして、声を上げることはしなかったが、実は私にもエラーが起こっていた。
俺はパソコンに詳しいんだぜ
講師は受講者のためにPython導入方法の詳細な資料を用意していた。Pythonをインストールするときはパスを通すのを忘れないようにせよ。pipで必要なライブラリをインストールするにあたり会社からではプロキシで弾かれるのでこれこれこういう対策をせよ。講座で使うプログラムや画像はCドライブの直下にml(マシンラーニング?)というフォルダを作ってそこに入れよ。等々。
C:\ml というフォルダを作れという指示の意図はわかる。OpenCVは(Windowsでは)cv2.imread()
やcv2.imwrite()
で日本語パスを使うと文字化けしてしまいエラーになるおそれがあるからだ。
だが私はそれに従わなかった。WindowsXPの時代ならともかく、Windows10はデスクトップであっても日本語パスになることはない(ユーザー名が日本語ならその限りではないが、当社ではそのようなことはない)。
講師が指示する理由を理解していて、それに従う必要がないことも理解していて。
それなのにエラーになるのか。
この私が。
大人気記事『OpenCVで日本語フォントを描写する を関数化する』を著したOpenCV大好きマンのこの私が!
私は目を皿のようにしてエラーメッセージを確認し、またフォルダを確認する。そして気づいた。
(OpenCVでマウスイベントを取得する ~GUIな集中線ツールを作る~ で作りました)
フォルダ名が日本語になってるー! さんざん半角パスだから問題ないとか言ってて、これがオチ?!
講師は共用の「Python講座」フォルダの中の「第4回」フォルダに前述の資料と「python_img」サブフォルダを置いていた。一連の画像やプログラムはサブフォルダに入っている。
講座が始まる前に資料に目を通し、「python_img」サブフォルダを C:\ml の下に置けというのが講師の意図だったのだろう。
しかし私はそれを理解せず、「第4回」フォルダをそのままデスクトップに置いてそこで作業していたのだった。
これは恥ずかしい。なぁにが「初学者を脱しつつある者を襲う贅沢な悩み」だ。
お前なんて初心者だ。ノービスだ。野比のび太だ。初心忘るべからず!
終わりに
驕ってはならないというお話でした。
それにしても文章ばかりの記事は読む気がしないな。関西弁で娘と語りあうスタイルにすればよかったか。