Turing Tech Talk #26 E2E自動運転の「目」を支える技術 ― カメラ処理パイプライン大解剖
──チューリングが目指す完全自動運転では、カメラが捉える映像品質がAI判断の精度を根底から支えます。今回のテックトークでは、車載8カメラ構成のハード設計からHDR合成・LEDフリッカー抑制・デモザイク処理などについて大解剖。過酷な道路環境でも信号機やトンネルを確実に捉えるカメラ処理パイプラインの実践知をお届けします。
はじめに
山口: 今回のテックトークでは、「カメラ」に焦点を当てて深掘りしていきます。チューリングは自動運転のAIを開発している会社ですが、基本的にはカメラを主要なセンサーとして採用しています。本日は、自動運転においてカメラにどのような性能が求められるのか、そしてその背景にあるカメラ処理パイプラインについて詳しく伺っていきたいと考えています。
それでは、早速ですが登壇者の紹介に入ります。本日登壇していただいているのは、尾前さんです。簡単に自己紹介をお願いします。
尾前: はい。大学院を卒業後、2018年にソニーセミコンダクターソリューションズに入社し、車載センサーのファームウェア設計開発や、イメージセンサーをLinuxデバイスに接続するためのデバイスドライバーの開発に携わっていました。約5年間ソニーで働いた後、ソニーグループ内で異動し、1年ちょっとの間、人工衛星に搭載する衛星間光通信端末の開発に携わっていました。そして2025年1月にチューリングに転職した、という経歴です。
山口: ありがとうございます。チューリングに入社されて半年ほど経ちましたが、尾前さんはカメラやイメージセンサーに関して非常に高い専門性をお持ちですね。また、Linux、特に組み込みLinuxのような低レイヤーの部分にも非常に深い知見をお持ちで、まさにEdge Computerチームが主に担当する領域で非常に活躍されています。
人工衛星の話は私も初めて聞きましたが、ソニーでもこれを作っているのですか?
尾前: はい、元々はソニーCSL(コンピュータサイエンス研究所)から始まったプロジェクトで、ソニーが持つブルーレイディスクなどのピックアップ技術が発端になっています。衛星間の通信で最も難しいのは、遠く離れた衛星間で非常に高精度に相手の衛星を捕捉する必要があることなのですが、この技術が光ディスクのピックアップ技術に似ているんです。ブルーレイなどの場合はもっと狭い範囲ですが、そこで求められる精度がナノメートル単位と非常に高く、それをスケールした時に衛星間の距離で求められる精度とちょうど同じくらいになる、ということで、我々でも衛星間の光通信ができるのではないか、と始まったものです。
山口: なるほど。それは面白いですね。私も昔、研究者時代に地球観測衛星のセンサーのキャリブレーションが専門だったことがあり、そのあたりの通信やセンシングといった最先端技術は非常に面白いと感じています。尾前さんの多様な経験も踏まえて今日の話を色々聞けたらなと思います。
チューリングの自動運転におけるカメラの役割と課題
山口: チューリングは自動運転AIの部分にフォーカスされがちですが、車を動かすためには、車自体の知識、搭載されているセンサー・デバイスの知識、そして計算機、OS、ソフトウェアといった多岐にわたる技術スタックが会社の中で扱われています。その上に初めてAIモデルや機械学習モデルが乗るわけです。特にその中でも、カメラは我々にとって最も重要なセンサーであると位置づけています。
自動運転車両に搭載されるカメラシステムと構成要素
尾前: まず、我々の自動運転システムで現在どのようなセンサーを使っているか説明します。

データ収集や自動運転のテストに使っている車両はアルファードですが、現在、その車両には8台のカメラが周囲に搭載されています。LiDARも搭載されていますが、LiDARは主にデータ収集に使い、実際の自動運転モデルの入力はカメラがメインとなっています。つまり、我々はビジョンベースのE2E自動運転に取り組んでいます。
現在の車載カメラの典型的な構成は以下のようになっています。

- 筐体: 車載カメラは車外に設置されることが多いため、雨や砂嵐などから保護するための防塵・防水性能が非常に重要です。また、熱の放熱設計も非常に重要になります。
- レンズ: 光を集め、イメージセンサーに像を結ぶために不可欠です。望遠用や広角用など、画角の異なるレンズを使い分けています。
- イメージセンサー: 光をデジタル値に変換して画像を生成する非常に重要な処理を行います。
- 画像処理チップ: イメージセンサーからの出力に対して、人が見られるような画像に変換するための様々な画像処理を行うチップです。これはイメージセンサーに内蔵されている場合と、別途存在する場合とがあります。
- シリアライザー・デシリアライザー: イメージセンサーや画像処理チップの出力形式であるMIPI(Mobile Industry Processor Interface)は、長距離伝送には向いていません。数十センチしか伸ばせないため、車内配線で数メートルを伝送するには、シリアライザーを使って長距離伝送可能な形式に変換する必要があります。計算機側で入力する前にデシリアライザーで元の信号を復元し、計算機に与える構成です。
山口: この構成は、カメラの物理的な部分から論理的な通信まで、非常に分かりやすく書いてもらっていますね。イメージセンサー以降は、電気的・デジタル的な処理が行われ、画像処理チップやシリアライザーを経て、通信規格(GMSLなど)のケーブルで計算機に送られ、そこで複合される、ということですね。
我々が使っている自動車用カメラは、自社で作っているものですか?それとも調達しているものですか?
尾前: 今は購入しているものです。
山口: となると、やはりカメラを作るのは難しいということですよね。
尾前: そうですね、難しいです。ただ、ODM(Original Design Manufacturer)として、どのようなイメージセンサーを使ってほしいかなどを決めた上で発注することは可能のようです。自動車メーカーに実績のあるカメラメーカーを使う場合は、多少ハードルは上がりますが。
山口: なるほど。つまり、特注のような形で発注する際に、イメージセンサーの種類やレンズの画角、焦点距離、絞りといった仕様、そして筐体の防水・防塵性能はもちろん、車載で重要となる振動、熱、EMC(電磁両立性)といった、車載に耐えられる信頼性なども選定していく、ということですね。
カメラ処理パイプライン
尾前: では、カメラ処理の大まかな流れを説明します。大きく分けてアナログの世界とデジタルの世界があり、ここを意識すると理解しやすいと思います。アナログは「光の世界」、デジタルは「画像情報になった段階」です。イメージセンサーは、光のアナログ情報を画像というデジタルな形に変換するものです。
カメラ処理の最初の段階では、レンズから受け取った光を画素で光電変換し、AD変換(アナログ-デジタル変換)します。これにより、光の強さをデジタル値に変換し、画像を構成します。AD変換によってデジタル画像になった状態から、様々な処理が始まります。これはあくまで一例であり、パイプラインの構成はイメージセンサーによって大きく異なります。
主な処理としては以下のようなものがあります:

山口: これらの処理は、主にカメラ側で行われる処理の話ですね。
尾前: そうです。ただし、構成はカメラによって変わります。例えば、デモザイク以降の処理がイメージセンサーに含まれていない場合もあり、その場合は別途画像処理チップで行うことになります。
今日はここから、HDR合成や階調圧縮、デモザイクなどについて説明します。
HDR合成とトーンマッピング
尾前:HDR (High Dynamic Range)について説明します。 HDRは、カメラが捉えられる明るさの範囲、その比率を指します。定義式としては、「ノイズと識別できる最低の光量」分の「最大の明るさ」のような形になります。この範囲が広いほど、ダイナミックレンジが良いとされます。後ほど詳しく説明します。

山口: なるほど。余談ですが最近、私はNintendo Switch 2を手に入れたのですが、何がすごいかというと、HDRへの対応がしっかりしていると感じました。Switch 1と比べてダイナミックレンジが非常に広いのが感じられたんですよね。HDRは、カメラ、例えばiPhoneでのビデオ撮影や、ゲーム機など、最新の多くのデバイスに搭載されていて、皆さんも知らないところで恩恵を受けていると思います。
尾前: 車載でよく出てくる例としてはトンネル内のシーンですね。
トンネル内部は暗く、外は明るいというように、明るさの範囲が非常に広くなります。この広い明るさの範囲を、一つのイメージセンサーで全て捉えるのが困難な場合があります。ダイナミックレンジは暗いところと明るいところを同時に撮れるという意味もあり、中と外を同時に撮れる必要がある車載カメラでは重要な意味を持ちます。
山口: 皆さんも人間の目をイメージしていただけると良いと思いますが、人間の目というのは実はめちゃくちゃ高性能なんです。例えば、明るい場所と暗い場所で見るものに対して、人間の目は自動的に調整して、ある程度同じように視力を保つことができます。しかし、普通の物理的なセンサーでは、このような何桁も光の量が違うシチュエーションをカバーするのは非常に難しいんです。
尾前: 明るさの分布を見てみると、夜空と快晴の太陽光では、明るさの値が大きく異なります。暗いところと明るいところを同時に捉えるのが非常に難しいことが分かります。夏の昼間の屋外と室内の明るさでは、桁が全く違い、10万倍、100万倍も異なることがあります。
山口:そんなに違うんですね。
尾前: 従来から行われてきた方法の一つに、「露光時間を変えて複数枚撮影し、それらを合成する」という手法があります。露光時間や絞りを調整することで、捉えられる明るさの範囲を調整できるため、例えば1ミリ秒、10ミリ秒、100ミリ秒と露光時間をずらして撮影し、それらを合成することで、トンネルの全範囲を捉える、というものです。

しかし、車載用途ではこの方法を使うのは非常に難しいです。その理由は、車は常に動いており、周囲の風景が素早く変わるためです。露光時間を変えて別の時間で撮影すると、その間に画像中の物体の位置が変わってしまい、合成した際に「アーティファクト」(ゴーストや幽霊のような像)が発生してしまう問題があります。
そのため、現在の車載イメージセンサーでは、split-pixelやsub-pixelと呼ばれる技術がよく使われています。この技術を使うことで、感度を分けた複数枚の画像を同じタイミングで同時に撮影することができ、アーティファクトの発生を防ぎながらHDR画像を生成できます。また最近では、この技術を使わずに、単一の露光でダイナミックレンジを向上させるイメージセンサーも登場しています。
山口: 我々が使っているカメラセンサーでは、このsplit-pixelやsub-pixelが主に使われている、という認識で合っていますか?イメージセンサーのピクセルアレイの中に、隣接する画素や大きな画素の隅に小さな画素があり、それぞれが異なる感度を持つことで明るいところと暗いところの両方を担当する、というイメージでしょうか?
尾前: はい。大きな画素の隅に、感度を下げて飽和しづらくした小さなピクセルが配置されており、それぞれが明るいところと暗いところを担当します。
山口: そういう親子のようなピクセルが現在の車載センサーでは使われている、ということですね。
尾前: 先ほど説明した車載センサーのsplit-pixelやsub-pixelで複数枚の画像を合成すると、大体24ビットや26ビットといった非常に高い画素深度のHDR画像が得られます。しかし、このままのビット深度で処理することは少なく、これを10ビットや12ビットに圧縮して内部で処理します。この圧縮処理がトーンマッピングや階調圧縮と呼ばれるものです。
トンネル内が多く映って全体的に暗い場合、トーンマッピングは暗い部分をよく見せるために全体的に明るい方向に補正します。これにより、トンネルの外側も明るく映るよう調整されます。 逆に、画像がトンネルの外側の明るい部分が多く映る場合、それほど明るくしない、といった処理が行われます。ですので、どういう画像が入るかによってこのトーンマッピングの処理も変わってきます。

山口: そもそも、画像の1ピクセルが持っている明るさの情報が、このビット深度なんですね。ビットが大きくなればなるほど、細かく精度を保って表現できると。24ビットあれば、かなり広いレンジで表現できるということですね。
尾前: 24ビットというのはあくまで合成した後の値域なので、アナログからデジタルに変換する際に適用されるのは10ビットや12ビットといったビット数になります。HDR合成では、感度の違いに応じてゲインをかけるため、HDRとしてのビット数も変わってきます。
山口: なるほど。明るいところに合わせると暗いところが潰れてしまう、といったことが起こるから、HDRを考慮する場合には、ビット数を大きく持っておいた方が情報が失われにくい、ということですね。ただ、それを画像として出力する際には、どこかで10ビットや12ビットに変換する必要がある、と。
尾前: そうですね。ビット数が増えれば増えるほどAD変換にかかる時間も伸びていきます。イメージセンサーのスペックシートを見ると、10ビットと12ビットで最大フレームレートが変わることもあります。例えば、12ビットでは30FPSでも、10ビットにすれば40FPS達成できるといったトレードオフがあるため、フレームレートなどの制約を受けてビット数が決定されることが多いです。
山口: ありがとうございます。この24ビットから12ビットへの変換は、単純な線形変換だと情報が潰れてしまうため、非線形の曲線を使って最適な変換を行う技術が必要なんですね。これはカメラの内部、つまりセンサーの基盤の中で行われることが多いのでしょうか?
尾前: そこは様々です。非常に重要な処理なので、イメージセンサーを使うメーカーごとに独自のアルゴリズムを持っていることが多いですね。イメージセンサー内部で行われることもあれば、外側の計算機側で行うケースも多いです。
山口: いわゆる最終的な画像のアウトプットに直結するから、カメラメーカーは独自の「味付け」をしていて、秘伝のタレのようなものがある、ということですね。
尾前: そうですね。このトーンマッピングは非線形変換なので、基本的には不可逆ですが、PWL変換(PieceWise Linear変換)のような可逆圧縮方法を持つイメージセンサーもあります。それを使えば、12ビットに圧縮してもホスト側で24ビットに戻すことが可能です。
山口: データ保持と圧縮のバランスは難しいですね。
尾前:はい。ハードウェアで画像処理を行う場合、ビット数が増えるほど回路規模も大きくなる、という問題もありますね。
山口: これらのトレードオフの中で、各社が最適なバランスを探っている、ということですね。
LEDフリッカー対策の難しさ
尾前: 次に説明するのはLEDフリッカーです。車載用途では、HDRと並んで最も話題になる技術の一つだと思います。動画で見ていただいているように、現在の信号機はほとんどLEDですが、実際には点滅していないのに、画像中で点滅しているように映ってしまう現象がLEDフリッカーです。これはAIモデルにとって非常に厄介な問題です。フレームによって信号が光ったり光らなかったりすると、モデルの認識に大きな影響が出るため、対策が必須です。

LEDフリッカーが発生する原理を説明するために、まずイメージセンサーが画像をどう取得しているかから説明します。現在の車載イメージセンサーはほとんどがローリングシャッター方式で画像を読み取っています。ローリングシャッターは、画像の上下で撮影するタイミングが違う方式です。

図のように、上から下へ行くに従って、読み出すタイミングがずれていくのが分かります。例えば、縦一列に並んだLEDが10ミリ秒ずつ点灯していく様子を撮影すると、画面上でどのLEDが光っているかが切り替わって見えます。これは、画像の上下で光をためている露光期間がずれていることを示しています。
フリッカーの発生原理は、LEDがPWM(パルス幅変調)制御によって光のオンオフを高速で切り替えることで光量を調整しているためです。人間の目には常に光っているように見えますが、実際には非常に短い周期で点滅しています。イメージセンサーが光っていない期間に露光してしまうと、信号機が消えているように映ってしまう、という現象が起こるわけです。
この対策は非常にシンプルで、LEDの点灯期間よりも長い時間露光すれば、必ずどこかのタイミングで光っている状態を撮影できる、というものです。つまり、LEDフリッカー対策は、基本的に露光時間を長くすることで対応できます。EN 12966で規定されているLED光源の周波数は人間がちらつきを感知しない90Hz以上なので、そこから11ミリ秒以上の露光時間を設定することが一つの対策となります。

しかし、露光時間を単純に長くすると、明るい快晴の太陽の下などで白飛びしやすくなります。つまり、LEDフリッカー対策は、必ずHDRと両立できるかどうかが最も難しいポイントです。イメージセンサーのスペックシートでも、LEDフリッカー対策あり/なしでダイナミックレンジの値が変わっていることがあります。
山口: このフリッカーは自動運転、特にカメラにおいて非常にクリティカルな問題ですよね。信号機は現在ほとんどLEDに置き換わっているので、カメラで撮影するとどうしても点滅して映らないシーンが出てくる。AIモデルは1フレームや数フレームで判断するため、その期間に信号機が映っていなければ、AIは判断できません。信号機が見えないと、交差点で止まるべきか進むべきか判断できないため、賢いAIであっても適切な挙動ができない。入力として信号機がちゃんと映っていることが前提として非常に重要になります。
露光時間を伸ばす、というのはシンプルですが、HDRと両立するのが難しそうですね。ここは実際どのようになっているのですか?
尾前: そこを解決するために、露光時間を長くしても飽和しない、白飛びしないような画素が作られています。
山口: なるほど、普通にシリコンセンサーとしてあまり飽和しないようなものを頑張って作ることで露光時間を確保しても大丈夫なようにしているということですか?
尾前:むしろそこしかないですね。 画素の段階で飽和しないようにするしかないかなと思います。
山口: もう根本から「パワーで解決」という感じですね。
尾前:はい。ここまでHDRとフリッカーについて説明しましたが、ここで自動運転モデルへの影響についてもお話しします。ダイナミックレンジの面では、逆光でハイライトが飛んだり、夜間で暗部がつぶれたり──その発生パターン次第で影響は変わります。

特にピクセルがアナログ段階で情報を失うと、画像内にデータが残らず、AI モデルとしては手の打ちようがありません。人間の目でも何が写っているのか分からない状態です。ただし例でも示しているように、コントラストを調整すると右の画像が左のように見え方を変えることがあります。デジタル領域にわずかでも情報が残っていれば、モデルが識別できるケースは十分にあります。
フリッカーについても、入力フレームの一部で信号が消灯していると、AI モデルに悪影響が生じますので、こちらも適切な対策が不可欠ですね。
尾前:ここからはカメラをどう使うかという観点のシャッター同期について説明します。

我々の車には8台のカメラが付いていますが、何も対策しないと、各カメラが撮影を開始するタイミングがバラバラになってしまうんですよね。カメラを再起動するたびに撮影タイミングが変わることもあります。これをAIモデルに入力してしまうと、悪影響が考えられます。例えば、前のカメラが0秒に撮影したとしても、後ろのカメラは0秒プラス10ミリ秒後の世界を映しているといった状態だと、色々と整合性が取れなくなってしまいます。
そのため、複数のカメラを同じ用途で同じAIモデルに入力する際には、イメージセンサーの撮影タイミングを同期する必要があり、我々もこれは実施しています。方法としては、イメージセンサーには撮影タイミングを知らせることができる機能があるので、そこに同期用のパルス(電気信号)を与えてあげることで、そのパルスに同期して撮影が行われるようにできます。これにより、複数のカメラが同じタイミングで撮影することを実現しています。
山口: これは、カメラを扱う上でよく「外部トリガー」と呼ばれる機能ですね。外部から電気信号を与えると、その瞬間に「パシッ」と写真を撮るようなイメージです。ビデオの場合も、1秒間に何回も、各カメラが必ず同じタイミングで撮影していく、という技術ですよね。
この外部トリガーの機能には色々なものがあると思いますが、例えば外部トリガー用の別の電気信号入力端子が用意されているカメラもあれば、内部の映像転送ケーブルでプロトコルを使って同期を行うケースもあると思います。我々のカメラの場合はどうなっているんですか?
尾前:我々の場合は、一般的なGPIO(汎用入出力)のような、通常の線を使って行っています。このGPIOの信号は、最初に説明したシリアライザー・デシリアライザーを通して長距離伝送しています。画像データだけでなく、GPIOやI2C、UARTといったシリアル通信もまとめることができるので、そのシリアライザー・デシリアライザーを介したケーブルを通してパルスを送って同期させている構成です。
山口: なるほど。同期タイミングは、理想的には例えば1ミリ秒ぐらいで揃っていてほしい、という感じでしょうか?そのくらいの精度で揃うイメージですか?
尾前: 1ミリ秒だと少し粗いかもしれませんね。今の実測値で言うと、数十マイクロ秒以下にはなっていると思います。タイムスタンプを付ける際の誤差もあるので正確ではないですが、そのくらいの精度ですね。
山口: なるほど。そのくらいの高い分解能で、複数のカメラの同時同期ができている、と。AI的には1ミリ秒でも足りるかどうかはケースバイケースですが、数十マイクロ秒レベルであれば十分高い精度ですね。
この辺りは、物理的なレイヤーの話だけでなく、ソフトウェア的に制御できる部分でもありますよね。車載計算機で動いているアプリケーションがあって、OSなどを介して同期信号を送る、といったソフトウェアがある、と。
尾前:はい、そうですね。ハードウェアの力を借りて、決まった周期のパルスを出す形です。
デモザイクと色情報処理
尾前: 最後に、デモザイクについて説明します。イメージセンサーは、そのままでは色情報を持っていません。光の強さをデジタル値に変換するだけなので、どの色の光がどれくらい来ているかには無頓着です。そのため、基本的にイメージセンサーの各画素にはカラーフィルターが配置されています。

このカラーフィルターは、例えば赤色のフィルターであれば、赤色に近い波長の光だけを通す、といった働きをします。これにより、ある画素では赤色、隣の画素では緑色、といった具合に、各画素で特定の色情報のみを捉えることができます。この状態で撮影された画像を「RAW画像」と呼びます。普段我々が見るRGB画像とは異なり、RAW画像では各画素がRGBのどれか一つのチャンネル情報しか持っていません。
このRAW画像を周囲の画素から情報を補間するのがデモザイク処理です。例えば、ブルーの画素に注目すると、周囲にはグリーンやレッドの画素がいくつか存在します。それらの周囲の画素から、例えば平均値を取るようなシンプルなアルゴリズムを使って、失われたRとGの情報を生成することで、各ピクセルがRGB全ての情報を持つ、我々が普段目にするようなRGB画像に変換できます。
最も一般的なカラーフィルター配列は、RGGB配列、またはBayer配列と呼ばれるものです。しかし、他にもRCCGやRYYCy(Cはクリア、Yはイエロー、Cyはシアン)といった様々なカラーフィルターの組み合わせが存在します。例えばRCCGは低照度性能に優れるといった特徴があります。このように、それぞれのカラーフィルターごとに得意不得意があります。
山口: このRGGB配列は、グリーンが多いですよね。人間の目は、赤い色から紫まで見えますが、最も感度が高いのは緑色の波長です。緑が人間の可視光域の真ん中にあるため、同じ光のエネルギーでも緑の方が人間は明るく感じるんです。そのため、画像を見たときに緑の情報が豊富である方が、人間の知覚に合致し、明るく感じられ、空間分解能も高くなるということですね。
これらの話は人間の目の特性も影響してますが、これがAIになった時にどうなるか、というのは私自身もよく考えています。AIは緑が多くなくてもいいかもしれませんし、RGB以外の2色でも良いかもしれません。例えばRCCGのような、クリアフィルターを含む配列の方が、光の感度としては稼げる部分が多いので、自動運転向けかもしれない。このあたりは、様々な流派がある、ということでしょうか?
尾前: そうですね。イメージセンサーの用途は、主にAIのような機械が判断するものと、カーナビのように人間が見るものの2つがあります。それぞれの用途によって最適なものは変わってくると思います。
山口: やはり、センサーの特性や変換を理解した上で、最適なものを選んでいく必要がある、ということですね。ありがとうございます。
※以降では、ディスカッション・質疑応答が展開されました。本イベントの全内容は、ぜひ記事末尾のYouTubeリンクからご覧ください。

最後に
山口: 今日は、自動運転に必要なカメラ性能について、かなり基礎的なところから詳しく解説していただき、非常に勉強になりました。
尾前: なかなか1時間で全てを説明するのは難しかったですね(笑)。
山口: こういったセンサー回りの専門的な話は、社内のエンジニアでもここまで細かい話をしている人は多くないと思います。
尾前: そうですねインターネットにもあまり情報がない部分が多いので。
山口:今日は専門的な話をまとめて聞けて良かったです。ありがとうございました。
チューリングでは、完全自動運転の技術を共に創る仲間を募集しています。今日お話ししたEdge Computerチームはもちろんのこと、機械学習エンジニア、リサーチャー、ソフトウェアエンジニア、組み込みエンジニア、インフラエンジニアなど、非常に幅広いエンジニア職種で仲間を募集しています。ご興味のある方は、ぜひ採用ページをご確認ください。多様な職種がありますので、ご自身がどれに当てはまるか、ぜひチェックしてみてください。
【イベント概要】
Turing Tech Talk #26 E2E自動運転の目を支える技術ーカメラ処理パイプライン大解剖
https://www.youtube.com/live/b_sNjxPRq68