5分でわかる「量子化技術」

量子化技術とは

数多くあるAIアプリケーションの中でも、特に画像認識は高い人気を誇ります。例えば、世界中にある膨大な量の写真が自動的に整理され、今日の気分にあわせた壁紙が表示できるとしたら面白いでしょう。

図

従来、撮影された写真は、人間によって解析され、メタ情報へと変換されてきました。例えば、家庭菜園で撮影した図aの写真からは、「収穫できる苺が3個ある」というメタ情報を生成できます。

しかし、農場が大規模化し、見渡す限りの畑を管理することになると、人間の力だけでは困難になります。ここで求められるのが自律動作マシンです。マシンが畑を撮影し、自ら解析、メタ情報として苺の個数を算出し、収穫するまでの一連の作業を行うシステムです。こうした自律動作マシンの実現には、どの程度の処理性能が必要となるのでしょうか。

もし、写真が4K画像(3,840x2,160)の場合、すべてのピクセルのRGB値に対して演算を行うと、最低24,883,200回の処理が必要となります(図a)。この計算量は、ほとんどのIoTエッジデバイスの計算能力を、はるかに超えた値です。そのため、実装するにはアルゴリズムを見直し、デバイスで処理できる大きさの計算量へと圧縮する必要があります。

図

まず、写真を256x144ピクセルまで縮小します(平滑化処理*1)。図bのようになり、見た目は良くありませんが、苺を見分けることはできそうです*2。

次に、各ピクセルを圧縮してみましょう。ここで登場する技術が、「nビット量子化技術」です。

図bのピクセルは、RGB値256階調のデータから構成されています。1点のデータを24bitで表現していますので「24bit量子化」状態と呼びます。

苺の判別には、B値は不要と思われるため*2削除します。またR値とG値が、一定の閾値を超えるかどうか(0 or 1 = 1bit)という情報に絞り、1点を2bitで表現します。これが「2bit量子化」状態です(図c)。さらに、収穫できる苺の部分はR値の領域に限定できるため*2、1点を1bitで表現する「1bit量子化」状態に圧縮(図d)、3個の苺を検出できました。

このように「nビット量子化技術」を活用することで、データ量を小さくしながらも、認識を実現できます。また、小さなデータは簡単な回路で処理できます。例えば、32bitの乗算回路は複雑ですが、1bit乗算回路はAND回路で表現できるため、32bit-CPUならば32ピクセルを同時に計算できます。加算も同様に、1bitの加算はXOR演算またはOR演算に置換できるため、32並列に計算できます。

このようにデータの傾向に着目することで、より高速なアプリケーションを実現することができます。

*1 画像解析に使われるCNN(Convolutional Neural Network)も内部で平滑化を繰り返し、特徴を抽出します。
*2 ここでは筆者が思いつきましたが、実際のアプリケーションでは組み込みAIがルールを導出します。

不要なデータを全て無視する、プルーニング技術

先の例では、B値が結果に影響しないと判断し、B値を削除しました。組み込みAIのシステムでは、AIがルールを自動生成しますが、生成されたルールの中で使わない入力値は極力除外した方が効率的です。重み(重要度)がゼロの場合、推論時に毎回ゼロを掛けるのでなく、値自体を使わなければ良いのです。これを「プルーニング(枝切り)技術」と呼びます。量子化技術と同じように、AIを高速化するテクニックのひとつです。