しかし、すべてがそう簡単にはいかないのがハードウエアの難しいところで、シミュレーション成功後の論理合成で思った以上に時間がかかりました。私が設計した回路の規模が大きすぎて論理合成が成功しなかったのです。これには回路規模を小さくできる部分を見つけ、一つひとつ対処することで解決しました。結局、シミュレーションが成功してから1週間以上この問題に悩まされ、成果報告会の前日にようやく動く回路が完成しました。

 しかし、この時点では高速化をしていなかったので、とてもリアルタイムとはいえない速度でした。回路の高速化は、複数の強識別器を並行して動作させることで実現できますが、1日で実装が終わるか不安でした。ここで、先ほど説明したAttentional Cascadeの上位二つの強識別器で半分以上の候補がはじかれることに注目し、最初の二つの識別器だけにリソースを割いて高速化を行いました。こうして、ようやくリアルタイム顔検出回路を完成させることができました。

 成果報告会の1週間前からは、「今から他のテーマにしたほうがいいのではないか」という思いがよく浮かびました。ただ、「成果報告会は外部公開されるとはいえ、必ずしも成果を上げなければいけないものではない」というティーチングアシスタント(TA)の方の言葉にも後押しされ、「完成しなくてもいい、やりきろう」と決心しました。

 自由課題で感じたハードウエア実装とソフトウエア実装で大きな違いは“自作感”でした。ハードウエア実装では、これまでの記事でお伝えしたように画像の表示や加工にも大きな手間が掛かります。2進数の数を整数として扱うか、小数として扱うか、全く独自のものとするかは、設計仕様によって決まります。さらに、画像のサイズ変更など、ソフトウエアであればライブラリを使用すると簡単に実現できるものでもハードウエアでは一から実装しないといけません。

 確かに、ハードウエア実装はソフトウエア実装に比べて手間も掛かり、いろいろと面倒な部分も多かったのですが、完成した時の喜びはひとしおでした。今まで、ソフトウエアでライブラリを使うことが多かった私にとって、ほとんど一から自分で実装するという手間が、ソフトウエア実装とは比べ物にならないほどの自信を与えてくれるような気がしました。

 成果報告会当日にはたくさんの方にお越しいただき、自分のやってきたことを説明することの難しさを感じました。今まで技術面の重要さは分かっていても、文章を書くことや、話すことの重要さはあまり感じてきませんでした。しかし、本気で取り組んだ成果を他の人に伝えること、コミュニケーションはどんな分野であっても重要で、おろそかにできないものだとCOJTや本コラムの執筆を通じて学ぶことができました。

 私の制作体験記は以上で終わりになります。COJTを受講した1年間、技術も含めていろいろなことを学べました。終盤の大変な時期を乗り越えることができたのも講師、TA、同期の方々のおかげです。今後、ハードウエアに関わることがあるかは分かりませんが、COJTで得た経験と自信を胸に頑張りたいと思います。