主旨
ある大規模な開発があるときに、その中で必要とされるモジュールの独自開発はすべきではない。
もともと生じる課題を解決する余力が、モジュールの独自開発に着手した時点で失われる。
ありがちな状況
- 新しい開発プロジェクトが始まった。開発する製品は、まったくの新規のプロジェクトだ。
- 新規のプロジェクトは、過去のしがらみもなく、新しい手法を試してみたくなる。
- 「新規のプロジェクトなんだから、モジュールも新規に開発しようよ。」
この記事で主張すること
- 大規模な開発があるときには、新規モジュールの独自開発を極力すべきでないと主張する。
- 独自開発をするしかない必然性が見つかるまで、あるいは、ほかに優先順位が高い課題がないことを見定めるまで、新規モジュールの独自開発をしてはならない。
安易に新規モジュールの独自開発をするとおちいる状況
- 例:ステレオカメラモジュールの自作
- ステレオカメラの作り方自体は簡単だし、OpenCVのモジュールを使うと、カメラキャリブレーション、ステレオ平行化の手順、視差の算出と深度計算は簡単だ。
- M12マウントのカメラモジュールも多数市販されているし、M12マウントのレンズモジュールも多数市販されている。
- それらを組み合わせれば、視野角や解像度を自分の思うようなカメラを用意できる。
- 自作モジュールだと、カメラ間の距離、基線長を自由に選べるのもうれしい。
- 自作モジュールだと、市販のカメラモジュールよりも安くなるように、部品を組み合わせることもできる。
- そうして、ステレオカメラモジュールを自作することになる。
- 例: ステレオカメラモジュールを自作した結果
- ステレオカメラモジュールを自作して、1台についてキャリブレーションをする。
- ステレオキャリブレーションのために、チェッカーボードをどのように撮影すれば良いのかわかっているので、良い結果がでたと思っている。
- 「ステレオキャリブレーションのチェッカーボードには、大パネルの液晶ディスプレイが向いている」というノウハウの出番だ。
- ベニヤ板はたわむし、平面性がいい場所に、印刷したチェッカーボードを貼り付けても、印刷した紙と平面との間に隙間が残る。
- チェッカーボードを表示した液晶ディスプレイは、そのようなたわみや隙間などの問題もない。
- そこで、1台のステレオカメラについては、良好な結果を得られる。
- そこで、ステレオカメラを自作してもうまくやっていけると自信を持つ。
- 例:ステレオカメラモジュールを自作した結果のその後
- ステレオカメラモジュールの結果を利用しての開発が進む。
- ところがある時点で、うまくいかない状況に出くわしてしまう。
- 深度の算出結果がおかしいことに気づく。
- 状況:
- キャリブレーションを実施したときと温度が10度以上異なる。
- キャリブレーション後に、ステレオモジュールに衝撃を加えてしまった。
- 何か原因がわからないけれども、キャリブレーションをやり直さなくればならなくなった。
- キャリブレーションをやり直すとうまくいくようになった。
- その後:
- キャリブレーションをすればやり直せば、目的の機能が実現できるのだけども、いつまでキャリブレーションなしで大丈夫なのかがはっきりしない。
- そのため、ステレオカメラモジュールの結果を利用する機能が、いま安心して使えるものかどうかがはっきりしないことになった。
- 教訓
- ステレオカメラモジュールはよほどの理由がない限り、自作してはいけない。
- 利用実績の多いステレオカメラモジュールは、以下のことを考慮している。
- ステレオカメラのハードウェアの特性が安定するように作られている。
- レンズの位置が固定されている。
- レンズ間の距離(=基線長)が安定するようにしてある。
- レンズの向きが、応力や熱変形によって変わりにくいようにしてある。
- カメラモジュールの信号処理で、2つのカメラで同一のゲイン設定、同一のシャッター速度の設定
- グローバルシャッターを利用しているので、動きのある被写体での特性の劣化が少ない。
- このように、安易にステレオカメラモジュールを自作すると、余計な苦労を背負うことになる。
例:顔照合モジュールの自作
- 顔検出や顔照合は、深層学習の進展によってオープンソースの実装が進んだことで、市販品のモジュールを使わなくても実装できるだろうという衝動に駆られたりしないだろうか。
- 誘惑:
- オープンソースの実装が実用上十分な水準に達していることを示してみたい。
- 顔照合のデータベースの設計も含めて、ソフトウェアの設計・実装能力に長けていることを示してみたい。
- 市販の顔照合がなくても十分なものを作れることを示してみたい。
- でも、そのような誘惑で顔照合モジュールを自作をすると痛い目を見るだろう。
- 想定される状況
- たいがいの状況ではうまくいく。
- しかし、時々極端におかしな結果になることがある。
- 顔向きが半ば横向きのような状況では、本人の顔ではなく、同じ顔向きでの他人の顔を照合結果として返してしまう。
- 公開データベース(西洋人中心)で照合を評価するとうまくいくのだが、ユースケースの中心となる日本人の顔画像で検索するとうまくいかない。
- 「マスクをしている人の顔で顔照合をしなければならない」ことに急遽状況が変わってしまう。今まで、マスクをしていることを想定していなかったので、どうしようもなくなる。
一般的な教訓
- 自作モジュールは自作ハードウェアに限らない。
- 自作ソフトウェア、自作の学習済みモデルも自作モジュール。
- 自作ソフトウェアの場合も同様だ。
- その余計な苦労のために、本来の開発課題に割り当てる時間が不足することになる。
- だから、モジュールの独自開発は、本当に必要とするまで先送りすることを勧める。