株式会社Ollo
製造業向けの映像解析AIソリューションを開発する株式会社Olloにて、AI/MLエンジニアとして画像・映像解析技術の研究開発に従事しました。
主に、Vision-Language Model(VLM)のファインチューニングと性能改善、VLM・MLMを用いた映像解析パイプラインのE2E開発、既存アルゴリズムの改良による解析精度の向上に取り組みました。
各開発タスクでは、解決すべき課題や目的が提示された後、具体的な技術的アプローチの検討から設計・実装・評価までを単独で担当しました。関連技術の調査や実験結果の分析を通じて改善方針を決定し、実装と検証を繰り返しながら開発を進めました。
機械学習モデル単体の性能改善に加え、複数のモデルを組み合わせた映像解析システムの構築や、データ処理・推論方式の改善にも携わり、モデルの研究開発からMLシステムの実装までを経験しました。
主な取り組み
1. Vision-Language Modelのファインチューニングと性能改善
本インターンで最も重点的に取り組んだのが、事前学習済みのVision-Language Model(VLM)を対象としたファインチューニングと性能改善です。
映像理解タスクに対して、汎用的な事前学習済みモデルを適応させることを目的に、モデルの学習方法、入力データの処理方法、評価方法を検討しました。モデルの学習・評価だけでなく、実験方針の設計から結果の分析、改善方法の検討まで、一連の研究開発プロセスを担当しました。
ファインチューニングの実装
PyTorch、Hugging Face、Unslothを用いて、LoRAによるParameter-Efficient Fine-Tuning(PEFT)と教師ありファインチューニング(SFT)に取り組みました。
対象タスクの特性を踏まえて学習データの扱い方や学習条件を検討し、モデルの学習処理を実装しました。モデルの出力を評価し、ファインチューニングによってどのような変化が生じたのかを分析して、改善につなげました。
長時間映像への対応と入力方式の検討
映像理解タスクでは、単一の画像とは異なり、時間方向に連続する情報を扱う必要があります。長時間の映像では入力できる情報量に制約があるため、映像をどのような単位で処理し、モデルへ入力するかが重要になります。
映像の時間的な分割方法や入力情報の構成について複数のアプローチを調査・検証し、対象タスクに適した入力処理を検討しました。既存のVLMをそのまま適用するのではなく、モデルの特性と映像データの構造を考慮した入力設計にも取り組みました。
モデル評価と性能改善
定量的な評価に加えて、個別の予測結果を確認する定性的な分析を行いました。評価結果からモデルの挙動や誤予測の傾向を把握し、学習方法や入力処理の改善につながる仮説を検討しました。改善案を実装して再評価し、各変更が性能に与える影響を検証しました。
こうした取り組みを通じて、ベースモデルと比較した性能の向上を確認しました。大規模事前学習モデルを使うためのライブラリや学習手法を習得するとともに、対象タスクに応じた適応方法を検討し、実験結果に基づいて改善を進める経験を積みました。
2. VLMを活用した映像解析パイプラインのE2E開発
VLMを活用し、映像データを入力として受け取り、モデルによる解析を実行し、その結果を出力するまでの映像解析パイプラインをEnd-to-Endで構築しました。
機械学習モデル単体の実装ではなく、複数の処理を連携させ、一つの解析システムとして機能させることを目的としました。映像データに対する処理と機械学習モデルによる推論を組み合わせ、入力から解析結果の出力まで一貫して実行できるパイプラインを設計・実装しました。
各処理の役割やモデル間の連携を考慮しながら、システム全体として期待した解析結果が得られるように実装と検証を進めました。パイプライン全体の動作確認と評価を通じて、個々のモデルが動くことと、それらを組み合わせたシステムが目的を達成することの違いを確認しました。
3. データオーグメンテーションと推論方式の変更による精度改善
既存の映像解析アルゴリズムに対して、解析精度の向上を目的とした改善に取り組みました。データオーグメンテーションの導入・調整と、モデルの推論方式の変更を、データ処理と推論処理の両面から実施しました。
データオーグメンテーションによる改善
映像・画像データに対するオーグメンテーションを用いて、既存の解析処理の精度改善に取り組みました。対象データとタスクの特性を踏まえて処理方法を検討し、変更後の性能を評価しました。モデルの学習アルゴリズムだけでなく、入力データの扱い方も予測性能に影響することを確認しました。
モデル推論方式の改善
既存モデルの推論方式を見直し、解析精度の改善に取り組みました。モデル自体の置き換えだけでなく、推論時の処理を検討・修正し、既存方式と比較して解析結果がどのように変化するかを評価しました。これらの変更により、既存アルゴリズムの解析精度を向上させました。
新しいモデルを導入するだけではなく、既存の処理方式やデータの扱い方を見直してシステムの性能を改善する、という進め方を実践しました。
自律的な開発と実験に基づく問題解決
各開発タスクでは、課題や目的が提示された後、技術的な解決方法の検討から設計・実装・評価までを単独で進めました。
対象となる課題を分析し、必要に応じて論文、技術資料、既存実装を調査したうえで解決方針を検討しました。選定したアプローチを実装し、実験と評価で効果を検証しました。結果から課題や改善点を特定し、次の実装へ反映するサイクルを繰り返しました。
課題分析、技術調査、方針設計、実装、実験・評価、改善という開発プロセスを自律的に遂行し、技術的な意思決定と実装の双方を担当しました。開発中に得られた知見や実験結果はチーム内で共有し、技術的な議論を通じて課題への理解を深めました。
得られた知見
機械学習システムの開発には、モデルの学習やアーキテクチャだけでなく、データ処理、推論方式、モデル間の連携、評価設計が必要であることを学びました。
VLMのファインチューニングに取り組む一方で、複数モデルを組み合わせた映像解析パイプラインをEnd-to-Endで構築したことで、モデル単体の研究開発と、それを使ったMLシステムの開発の両方を経験しました。
データオーグメンテーションや推論方式の変更を通じて、モデルを差し替えることだけが性能向上の手段ではなく、データや処理方式を含めたシステム全体を見ることが重要であると学びました。各タスクを自律的に進めたことで、未知の技術課題に対して解決方針を立て、実装と実験を繰り返しながら改善する進め方を身につけました。
技術スタック
- 言語: Python
- 深層学習: PyTorch、Hugging Face Transformers、Unsloth
- コンピュータビジョン: OpenCV、映像処理
- 手法: Vision-Language Model、LoRA、PEFT、教師ありファインチューニング(SFT)、データオーグメンテーション
- 環境: Linux