インターン生が農業DXサービスの改善に挑戦した話: 地図xAIの可能性

はじめまして。OPTiMサマーインターンシップ2025に参加した佐々木です。大学では農学を専攻しています。趣味は、御朱印集め、野菜作り、犬を吸うことです。

今回のインターンシップでは、社長室・R&Dユニットに配属していただきました。今回のブログではインターンを通じて学んだことについて共有させていただきます!

インターン参加動機

  • 実務におけるAIの実装プロセスやチーム開発について学びたい!
  • 農業xAIを企業で働きながら体験してみたい!

関わったサービスの紹介

私が関わった ピンポイントタイム散布 は、以下のようなサービスです。

  • 農薬散布に必要な全プロセスをデジタル化し代行
  • AIが最適な散布適期・作業計画を提案

サービス運用上の課題

顧客から農薬散布圃場のデータ(圃場地番一覧、紙地図など)を受領した後、OPTiM側で現実のどこに位置するのか確認する(登記簿地番とマッチングさせる)業務に課題が生じていました。 登記簿情報との照合でおおよそマッチングできるが、残りは目視確認、または顧客に確認しているとのこと。まだまだ自動化できない部分があり、人手による作業がボトルネックになっているようです。

社内運用向け地図マッチングツール

ピンポイントタイム散布の地図業務を効率化させるために、R&Dでは社内運用向け地図マッチングツールを開発しています。顧客から受領した紙地図データ(PDF)を自動でジオリファレンス(画像に位置情報を付与)することが可能です。

なにをしたか

インターン内容

  • 社内運用向け地図マッチングツールの改善
  • 現状のツールは紙地図上のテキスト情報に頼っているため、地番の記載がない地図に対応できない
    • →地図の画像的な特徴を活用したジオリファレンス(画像に位置情報を付与)ができないか

タスク: XFeatモデルのファインチューニング

  • ジオリファレンス(地図同士のマッチング)のためには、2つの画像の対応点を取る必要がある
    • →軽量なキーポイント検出+特徴量抽出手法であるXFeatが社内で検討されてきた
  • XFeatは空中写真ベースの地図でもある程度使えることがわかっている。ただし、普通の写真データ (MegaDepth、COCO_20k) で学習されており地図特化ではない。また、画像の回転に弱い (紙地図は方向がばらばら)
    • →XFeatモデルを地図向けにファインチューニングする

ファインチューニングとは?

学習済みのモデルを追加のデータセットによって調整する手法です。

今回は普通の写真向けに開発された事前学習済みXFeatモデルをベースに、空中写真・標準地図から構成されるデータセットを使って、地図特化のXFeatモデルとして学習しています。

具体的なタスク

  • XFeatの調査
    • アルゴリズムの概要について調査し、地図・空中写真向けの学習に必要なモジュールを検討
  • 学習に必要なデータセットの作成
    • 地理院タイルの空中写真から構成されるデータセットを作成
  • ファインチューニング実行のため訓練用コードを変更
    • 地図画像・空中写真向けのトレーニングタイプを追加し、カメラ撮影画像だけでなく、地図マッチング向けのカスタムデータセットも読み込めるように

ファインチューニング実施&結果確認

マッチしている点もありますが、十分な精度には達していません。
赤枠部分は同じ範囲を示しています。

※左上との対応に偏ったデータを与えてしまったので、過学習してしまった可能性があります。

地理院タイル (写真) のうち、全国最新写真(シームレス)を加工して作成

達成状況

  • Step1: XFeatの調査、データセットの作成→達成
  • Step2: ファインチューニング実行のため訓練用コード変更→達成
  • Step3: ファインチューニング実施&結果確認→達成
  • Step4: 精度の改善・地図を含んだ画像や回転処理も含めての学習→未達成

学んだこと

チームで働くことの面白さを学びました。コードレビューをメンターの社員の方と行った際、すごい人はこうやってコードを読んでいるのか…と学びになった部分は多かったです。また、GitLabの一連の使い方(コードをpushして共有、Issueで進捗管理)を初めて学びました。かなり便利だとわかったので研究でも使っていきたいと思います。

また、コードの読み方についても学びました。ほかの方が書いた大量のコードを読むには、スクリプトをまたいでどこがどう機能しているか大まかな構造をつかむ必要があることがわかりました。一方で、「一行を粗末にしたものは一行に泣く」ことも実感しました。妙に学習に時間がかかるしうまくいかないな…と思っていたら、学習済みの重みを読み込む処理を書き忘れていたことも…(泣)

デバッグの際は気になる箇所を一行一行プリントする​。どう処理しているのか紙に起こして整理することを通して、想定していた処理と違うところはどこか把握する癖がつきました。社員の方からデバッガーを使うといいよというアドバイスもいただいたので、挑戦してみたいと思います。

AIに頼りすぎず、大事なところはドキュメントやライブラリ作者のコメントをさかのぼることも、気を付けていきたいです。

2週間の感想

OPTiMの雰囲気やそこで働いている人への理解(どんな性格?どんなバックグラウンド?)が深まりました。

個人的に感じた雰囲気

  • 技術が好きで、積極的に磨いている人が多い
  • 社員同士の仲が良く、面倒見がいい
  • 開発がほぼ未経験の人でも、地道にプロダクトを作ってスキルアップしていった人もいる
  • IT業界の中でも「ものづくり」の領域に近い面白さがある

コードが読めない、書けない、、どう進めればいいかの方針立てに苦戦する、、等の場面も多かったです。自分の無知さ・勉強の足りなさを実感しました。こうした反省点はありますが、これに関しては経験不足が原因としては大きいと思っています。とにかくプロダクトを作ってみたり実験してみたり、へたくそでも実践することが上達には必要ですね。

他のインターン生は高専生、他大学の人だったので、交流が刺激になりました。

本当に楽しい、充実した2週間を過ごすことができました! インターン生の方、同じチームメンバーの方をはじめとして、OPTiMの皆さんには大変お世話になりました!もしかしたら一番手のかかるインターン生だったかもしれませんが、伴走していただいて走りきることができました。 ありがとうございました!

採用情報

オプティムでは、AIエンジニアに限らずITやエンジニアリングに興味のある方を対象として、定期的にインターンシップを実施しております。ご興味のある方はインターンシップ特設ページをご覧ください。

www.optim.co.jp

また、オプティムではエンジニアの採用も実施しております。

www.optim.co.jp