はじめに
技術開発をしている中で判断を迫られることは多い。その判断結果は、開発を成否に直結することが多い。
- なにかしらハードウェアの選択をしなければ、開発に着手することもできない。
- しかも開発の初期では、不十分な判断材料しかもたない。
その状況で、**「早い段階の失敗は成功の秘訣」**と主張する。
ソフトウェアは入力・出力のハードウェア性能、演算のハードウェア性能に依存する。
ソフトウェアの開発だからといって、「ソフトウェアを書きなおせばなんとでもなる」ものではない。
計測や画像認識や機械学習は、使用するハードウェアで取得するデータの品質に依存する。
元々のデータの品質が劣化しているときには、できることが限られる。
顔照合をするときには、顔の画像の大きさと顔画像の鮮明さがいる。
撮影するときのレンズの視野とイメージセンサの画素数とが必要なことは誰でも気づくだろう。
それと同時に、レンズの鮮明さ(=線像強度分布(Line spread function)、点像強度分布、光学伝達関数のよしあし)が重要になってくる。同じ視野角のレンズであっても、fullHDのカメラ用のレンズと、NTSCのアナログカメラ用のレンズとは違うということだ。
深層学習が、いろんな画像認識を可能にしている。とはいっても、画像の画素数とフレームレートの組み合わせでは、検討しているハードウェアの演算性能で性能を達成できるかどうかは、設計の初期の段階では不明な場合もある。ソフトウェアを開発するからといって、「ソフトウェアを書きなおせばなんとでもなる」ものではないことがわかってもらえるだろう。
最初からうまくいく設計をできない
新しいものを作るときは、まだ経験していない要素があることは避けられない。
未知の要素があるものを扱うときに最初からうまくいくことはない。
そのことを覚悟しよう。
だから、失敗する要因を意識し続けよう。
うまくいく設計は、うまくいかない条件を潰して見つかることが多い。
「うまくいく設計は、うまくいかない条件を潰して見つかることが多い。」と告白する。
これくらい処理を端折れば、計算量が削減できて、想定しているCPUでも処理しきれるだろうなどというもくろみをもって開発に着手したりする。
しかし、実際にそのアルゴリズムを検討すると、そこまで端折ると精度が確保できないとかわかったりするものだ。
そうすると、性能の高いCPUボードに置き換える必要が生じたりする。
他にも、実際に処理を開発してみると、他のハードウェアの性能が不十分だと気づくことがあったりする。そのような場合、その変更点の波及する範囲は広い。一般にハードウェアとソフトウェアからなる装置の場合、ハードウェアは後から置き換えるのが難しい。
計測や機械学習は、使用するハードウェアで取得するデータの品質に依存する。元々のデータの品質が劣化しているときには、できることが限られる。
深層学習などの進展があるから、いくらでも後でなんとかなるだろうというのは、傲慢な考え方だ。
例えば、ボケたナンバープレートで、文字を読み取るのは、ボケてないナンバープレートで文字を読み取るのに比べて、はるかに大変だ。
Topデータとしては、ボケた文字や低い解像度の文字を復元すればなんとかなる事例もあるだろう。しかし、一般的な状況では、そのような処理がうまくいくとは限らない。
問題が製品開発の後期に発覚するのは危険だ。もはや修正の時間的な余裕・金銭的な余裕ともになくなってしまっていて、命取りになってしまう。でも発覚するのが早い段階ならば、開発プロジェクトに与える影響は、修正可能な範囲にすることができる。
だから次のことを主張したい。
- 判断に失敗しないというのは難しい
- 自分の判断が間違えている可能性を常に意識すること
- 判断の妥当性を検証できる早いタイミングで検証すること。
早い段階での失敗は成功の秘訣。
そう主張したい。