応用情報技術者 2021年 秋期 午後 問07
IoTを利用した養殖システムに関する次の記述を読んで、設問1~3に答えよ。
G社は、海上の生け簀の中で良質な養殖魚の育成を支援する、IoTを利用した養殖システム(以下、スマート生け簀という)を開発している。
〔スマート生け簀のシステム構成〕
スマート生け簀の概観を図1に、スマート生け簀のシステム構成を図2に示す


スマート生け簀は、網をつるすためのブイに接続された水質センサ、水中ステレオカメラ、残餌検知部、及び給餌部で構成される。給餌部は、海中への餌の投入(以下、給餌という)を行う。残餌検知部は、養殖魚が食べ残して沈んでいく餌(以下、残餌という)を収集する集餌コーン及び残餌センサで構成される。給餌部は、残餌検知部で取得した残餌の量を用いて求めた食べた餌の重量、水質センサの計測データ(以下、水質データという)、及び水中ステレオカメラで撮影された動画(以下、動画データという)をサーバに送信する。サーバは、蓄積したデータを基にAIで分析し、与える餌の重量(以下、給餌重量という)、及び餌を与える日時(以下、給餌日時という)を決定し、給餌部に送信する。
〔給餌部の動作概要〕
(1) 給餌部は、定期的に動画データ及び水質データを受信してフラッシュメモリに保存する。保存した動画データ及び水質データをサーバに送信する。
(2) 給餌部は、給餌重量及び給餌日時をサーバから受信する。指示された給餌日時になると、給餌部は、給餌重量を基に、給餌を行う回数(以下、給餌予定回数という)、1回当たりの餌の重量を求める。さらに、給餌の終了判断に用いるしきい値を決定し、次の動作を開始する。
・給餌部は、1回目の給餌を開始するとともに、残餌検知部を動作させる。
・残餌は、集餌コーンによって集められる。残餌センサは、通過する残餌を1個ずつカウントし、その値をカウント値とする。カウント方法は、アップカウントとする。
・給餌部は、5分間隔でカウント値を読み込み、単位時間当たりのカウント値(以下、Ct値という)を求める。Ct値がしきい値より少ないときは、養殖魚が餌を食べ続けていると判断する。Ct値がしきい値以上のときは、養殖魚が餌を食べなくなったと判断する。
・給餌部は、Ct値がしきい値より少ないときは、給餌予定回数に達するまで給餌を繰り返す。
・給餌予定回数に到達したとき、又はCt値がしきい値以上のとき、給餌を終了する。終了直前で読み込んだカウント値を、給餌終了時のカウント値とする。
・給餌部は、給餌を行った回数を基に、実際に給餌した餌の重量を求める。求めた値を用いて、食べた餌の重量を求める。ここで、給餌を行う1個の餌の重量は均一とする。
・給餌部は、食べた餌の重量をサーバに送信する。
〔サーバの動作概要〕
サーバは、動画データを基に、養殖魚の大きさ・形状・推定個体数を抽出し、水質データと食べた餌の重量を併せて蓄積する。サーバは、蓄積したデータを基にAIで分析し、良質な養殖魚を育成する上で適した給餌重量及び給餌日時を決定して、給餌部に送信する。
〔装置の機能〕
スマート生け簀の構成要素の概要を表1に示す。

給餌日時になったときの給餌処理フローを図3に示す。

設問1:スマート生け簀の動作について、(1)、(2)に答えよ。
(1)サーバは良質な養殖魚を育成するために、AIで分析を行って養殖魚を管理している。AIの分析に用いるデータ中には、水質データ、食べた餌の重量、養殖魚の大きさ・形状・推定個体数がある。これらのデータをサーバに蓄積するときに付加すべきデータを答えよ。
模範解答
日時データ
解説
解答の論理構成
- サーバが行う分析は、時系列で変化する複数の値を突き合わせて傾向を導き出す処理です。問題文には
「サーバは、蓄積したデータを基にAIで分析し、良質な養殖魚を育成する上で適した給餌重量及び給餌日時を決定」
とあり、過去データの“いつ”の値かを区別できなければ学習も最適化もできません。 - また、水質や摂餌量の変動は時間帯・日付・季節要因と密接に関係します。そのため個々のレコード間を関連付けるキーとして「いつ取得したデータか」を保存する必要があります。
- よって、水質データ・食べた餌の重量・養殖魚の大きさ・形状・推定個体数をサーバに蓄積する際に付加すべき情報は「日時データ」です。
誤りやすいポイント
- データの識別子として“装置ID”や“給餌回数”を答えてしまう
→ 問題は「サーバに蓄積するときに付加すべき」共通項目を聞いており、全データに必須となるのは時間を示す情報です。 - 「給餌日時」と混同し、“次回給餌予定の日時”を付けると誤解する
→ 付加するのは取得時刻を示すタイムスタンプであり、AIが決めた予定時刻ではありません。 - 「日付」だけ、または「時刻」だけを記載して部分点狙いをする
→ 問題文は時系列分析が前提なので、正確には両方を含む「日時データ」を明示する必要があります。
FAQ
Q: なぜ時間軸が無いとAI解析に支障が出るのですか?
A: 養殖環境は潮汐・気温・日射などの影響を受け、同じ水質でも朝と夕方では魚の食欲が異なる場合があります。時系列を持たないデータではこれらの因果関係を学習できません。
A: 養殖環境は潮汐・気温・日射などの影響を受け、同じ水質でも朝と夕方では魚の食欲が異なる場合があります。時系列を持たないデータではこれらの因果関係を学習できません。
Q: センサデータの受信順序で時刻を推定する方法では不十分ですか?
A: 受信遅延やネットワーク障害が発生すると順序が狂います。データ生成側で日時を付加しておけば遅延に関係なく正確に整列できます。
A: 受信遅延やネットワーク障害が発生すると順序が狂います。データ生成側で日時を付加しておけば遅延に関係なく正確に整列できます。
Q: 日時データはどの精度で保存するべきでしょうか?
A: 残餌カウントが「5分間隔」で処理されるため、少なくとも分単位の精度が必要です。将来の分析高度化を考慮し、秒単位での保存が推奨されます。
A: 残餌カウントが「5分間隔」で処理されるため、少なくとも分単位の精度が必要です。将来の分析高度化を考慮し、秒単位での保存が推奨されます。
関連キーワード: タイムスタンプ、時系列データ、センサフュージョン、データラベリング
設問1:スマート生け簀の動作について、(1)、(2)に答えよ。
(2)給餌部が給餌を開始してから、カウント値を読み込むまでに単位時間待つ必要がある。その理由を30字以内で述べよ。
模範解答
残餌が残餌センサに到達するまでに時間を要するから
解説
解答の論理構成
- 【問題文】では「給餌部は、5分間隔でカウント値を読み込み、単位時間当たりのカウント値(以下、Ct値という)を求める。」と定義しています。この“5分間隔”こそが単位時間待ちの根拠です。
- 同じく【問題文】に「残餌は、集餌コーンによって集められる。残餌センサは、通過する残餌を1個ずつカウントし、その値をカウント値とする。」とあります。
- つまり、給餌直後は餌がまだ水中を漂っており、集餌コーンや残餌センサに到達していません。
- したがって、給餌直後にすぐカウント値を読み込むと誤って“残餌が少ない”と判断してしまいます。
- 適切にCt値を算出し、餌を食べ続けているか(しきい値比較)を正しく判定するには、餌が沈降して残餌センサを通過するまで待機する必要があります。
- 以上より「給餌部が給餌を開始してから、カウント値を読み込むまでに単位時間待つ」理由は、餌が実際にカウント可能になるまでの物理的な遅延を吸収するためだと分かります。
誤りやすいポイント
- 「5分間隔=センサ処理時間」と誤解し、通信遅延や計算時間と結び付けてしまう。
- “残餌センサが常時カウントしているから待ち不要”と考え、沈降時間を無視する。
- 単位時間を“測定間隔の平均化目的”と説明し、設問が問う“待つ必要性”を外してしまう。
FAQ
Q: 「5分」は固定値ですか、養殖環境により変わりますか?
A: 【問題文】では固定値として記載されていますが、実際のシステムでは魚種や水深によって調整可能です。
A: 【問題文】では固定値として記載されていますが、実際のシステムでは魚種や水深によって調整可能です。
Q: 残餌センサが高性能なら待ち時間は短縮できますか?
A: センサ性能よりも餌の沈降速度が支配的なので、大幅短縮は難しい場合が多いです。
A: センサ性能よりも餌の沈降速度が支配的なので、大幅短縮は難しい場合が多いです。
Q: しきい値超過で給餌を止める仕組みは何を防いでいますか?
A: 餌の食べ残し増加による水質悪化と餌コストの無駄を防止します。
A: 餌の食べ残し増加による水質悪化と餌コストの無駄を防止します。
関連キーワード: センサ遅延、フィードバック制御、沈降時間、しきい値判定、IoTデータ収集
設問2:水中ステレオカメラの動画は、左右それぞれ20フレーム/秒であり、1フレームは800×600ピクセルの画素数で、1画素当たりのデータ長は24ビットである。1回当たり2分間の動画を撮影し、給餌部のフラッシュメモリに保存する。この動画データについて、(1)、(2)に答えよ。ここで、1Gバイト=10バイトとする。
(1)撮影1回当たりの動画データのサイズは、何Gバイトか。答えは小数第1位を四捨五入して、整数で求めよ。
模範解答
7
解説
解答の論理構成
-
フレーム数の算出
【問題文】より「左右それぞれ20フレーム/秒」であり、ステレオなので
。 -
1フレーム当たりのデータ量
「1フレームは800×600ピクセル」「1画素当たりのデータ長は24ビット」である。
800 × 600 = 480 000 ピクセル
24ビット = 3バイト
480 000 × 3 = 1 440 000 バイト/フレーム -
1秒当たりのデータ量
1 440 000 × 40 = 57 600 000 バイト/秒 -
1回撮影(2分間)の総データ量
【問題文】で「1回当たり2分間」とあるので
57 600 000 × 120 = 6 912 000 000 バイト -
バイトをGバイトへ換算
「1Gバイト=10バイト」と定義されている。
-
四捨五入
【問題文】の指示「小数第1位を四捨五入して、整数で求めよ。」より
6.912 → 7
誤りやすいポイント
- ステレオ撮影の「左右それぞれ20フレーム/秒」を見落とし、20fps のまま計算してしまう。
- 24ビットを 24バイトと誤読する、あるいは 24bit → 2バイトと誤換算する。
- 1Gバイトの定義が 2の30乗ではなく「10バイト」である点を読み飛ばす。
- 四捨五入前の 6.912Gバイトをそのまま解答してしまう。
FAQ
Q: 24ビット/画素はなぜ 3バイトと換算するのですか?
A: 1バイト=8ビットなので 24ビット÷8=3バイトとなります。
A: 1バイト=8ビットなので 24ビット÷8=3バイトとなります。
Q: フレームレートは左右を合わせて 40fps で良いのですか?
A: はい。「左右それぞれ20フレーム/秒」と明記されているため、合計 40fps で計算します。
A: はい。「左右それぞれ20フレーム/秒」と明記されているため、合計 40fps で計算します。
Q: 1Gバイト=10バイトという表記は 10の9乗という意味ですか?
A: そのとおりです。問題の定義に従い、1Gバイトを 1,000,000,000 バイトとして換算します。
A: そのとおりです。問題の定義に従い、1Gバイトを 1,000,000,000 バイトとして換算します。
関連キーワード: ビット換算、フレームレート、ステレオ映像、データサイズ、十進バイト
設問2:水中ステレオカメラの動画は、左右それぞれ20フレーム/秒であり、1フレームは800×600ピクセルの画素数で、1画素当たりのデータ長は24ビットである。1回当たり2分間の動画を撮影し、給餌部のフラッシュメモリに保存する。この動画データについて、(1)、(2)に答えよ。ここで、1Gバイト=10バイトとする。
(2)動画データを給餌部のフラッシュメモリに保存するために、水中ステレオカメラ内で行う必要がある処理は何か。ここで、給餌部のフラッシュメモリの容量は2Gバイトとする。
模範解答
画像圧縮処理
解説
解答の論理構成
-
元データ量を算出
【問題文】には「左右それぞれ20フレーム/秒」「1フレームは800×600ピクセル」「1画素当たりのデータ長は24ビット」「1回当たり2分間の動画」とあります。- 1フレーム当たりのバイト数
- 1秒当たりのフレーム数
左右2系列なので - 1秒当たりの容量
- 2分(120秒)当たりの容量
- 1フレーム当たりのバイト数
-
フラッシュメモリ容量との比較
【問題文】には「給餌部のフラッシュメモリの容量は2Gバイト」とあります。
計算結果「6.912Gバイト」は「2Gバイト」を大きく超え、無圧縮では保存できません。 -
必要な処理の導出
容量を抑えて保存できるようにするには、画素情報を効率的に符号化する処理が必要です。静止画フレームを対象に冗長性を除去し、結果として動画全体のデータ量を大幅に小さくできる代表的な方法が「画像圧縮処理」です。 -
よって解答は「画像圧縮処理」となります。
誤りやすいポイント
- 「20フレーム/秒」を片眼分と思い込み、ステレオであることを見落としてデータ量を半分で計算してしまう。
- 1ピクセルの「24ビット」を「24バイト」と勘違いして計算を誤る。
- 「動画圧縮」と「画像圧縮」の語を混同し、設問が求めている粒度(フレーム単位の圧縮)を外してしまう。
- フラッシュメモリの「2Gバイト」を 2×1024³ と解釈し、10進表記との差を考慮せずに計算をずらす。
FAQ
Q: 動画専用のコーデック名まで答える必要はありますか?
A: 設問は「行う必要がある処理は何か」を問うており、処理の種類を示せば十分です。代表的手段として「画像圧縮処理」を記述すれば解答要件を満たします。
A: 設問は「行う必要がある処理は何か」を問うており、処理の種類を示せば十分です。代表的手段として「画像圧縮処理」を記述すれば解答要件を満たします。
Q: 「画像圧縮処理」と「動画圧縮処理」はどちらでも良いですか?
A: 多くの試験では同義に扱われる場合が多いですが、設問がフレーム単位のデータ量削減を意図しているため、模範解答に合わせ「画像圧縮処理」と記述するのが安全です。
A: 多くの試験では同義に扱われる場合が多いですが、設問がフレーム単位のデータ量削減を意図しているため、模範解答に合わせ「画像圧縮処理」と記述するのが安全です。
Q: 圧縮率はどの程度を想定すべきですか?
A: 設問は処理内容のみを聞いており、具体的な圧縮率は求めていません。2Gバイト以下に収まるような適切な圧縮率が選択される前提で回答します。
A: 設問は処理内容のみを聞いており、具体的な圧縮率は求めていません。2Gバイト以下に収まるような適切な圧縮率が選択される前提で回答します。
関連キーワード: 画像圧縮、ビットレート、フレームレート、ストレージ容量
設問3:給餌処理フローについて(1)、(2)に答えよ。
(1)図3中のa、bに入れる適切な字句を答えよ。
模範解答
a:カウント値
b:しきい値以上
解説
解答の論理構成
-
aに入る語句
- 【問題文】では「残餌センサは、通過する残餌を1個ずつカウントし、その値をカウント値とする。」
- さらに「給餌部は、5分間隔でカウント値を読み込み、単位時間当たりのカウント値(以下、Ct値という)を求める。」とあります。
- 図3で a を読み込んだ直後に「Ct値を求める。」処理が続くので、読み込む値は Ct 値計算の元になる「カウント値」しかあり得ません。
- よって a = 「カウント値」。
-
bに入る語句
- 養殖魚が餌を食べなくなったかどうかの判定条件として、【問題文】に「Ct値がしきい値以上のときは、養殖魚が餌を食べなくなったと判断する。」と記載されています。
- 図3の菱形判定は Yes 分岐が「給餌終了時の … 食べた餌の重量を求める。」へ直結しており、まさに「給餌を終了する」条件です。
- 従って判定文は「Ct値がしきい値以上か。」でなければなりません。
- よって b = 「しきい値以上」。
-
結論
以上より、 ・a:カウント値
・b:しきい値以上
誤りやすいポイント
- 「Ct値を読み込む」と誤解する
Ct 値は計算結果であって読み込む対象ではありません。まず「カウント値」を取り、その後 Ct 値を算出します。 - 「しきい値より少ない」を判定に入れてしまう
終了条件は「餌を食べなくなった」状態であり、【問題文】に明示されたのは「Ct値がしきい値以上」のときです。少ない方は継続判定になります。 - フローチャート中の Yes/No の向きを読み違える
Yes 分岐が終了処理へ進むことを確認せずに語句を当てはめると逆になります。
FAQ
Q: Ct 値はどのように計算されていますか?
A: 【問題文】にある通り「給餌部は、5分間隔でカウント値を読み込み、単位時間当たりのカウント値(以下、Ct値という)を求める。」とあります。具体的には5分間で増加したカウント値を5分で割る、あるいは単純に増加分を Ct 値とみなす方式が一般的です。
A: 【問題文】にある通り「給餌部は、5分間隔でカウント値を読み込み、単位時間当たりのカウント値(以下、Ct値という)を求める。」とあります。具体的には5分間で増加したカウント値を5分で割る、あるいは単純に増加分を Ct 値とみなす方式が一般的です。
Q: しきい値は固定値ですか?
A: しきい値は毎回「給餌部は、給餌重量を基に … しきい値を決定」しており、固定ではなく給餌条件などに応じて変化します。
A: しきい値は毎回「給餌部は、給餌重量を基に … しきい値を決定」しており、固定ではなく給餌条件などに応じて変化します。
Q: カウント値はなぜゼロクリアするのですか?
A: 直前の残餌をリセットしないと過去の値が混ざって Ct 値を正しく計算できません。そのため図3開始直後に「残餌センサのカウンタをゼロクリア」しています。
A: 直前の残餌をリセットしないと過去の値が混ざって Ct 値を正しく計算できません。そのため図3開始直後に「残餌センサのカウンタをゼロクリア」しています。
関連キーワード: フローチャート制御、カウンタ、しきい値判定、センシングデータ、IoT制御
設問3:給餌処理フローについて(1)、(2)に答えよ。
(2)養殖魚が食べた餌の重量の算出方法について、次の式中のc〜fに入れる最も適切な字句を解答群の中から選び、記号で答えよ(cとd及びeとfは順不同)。
食べた餌の重量 = (c × d) - (e × f)
解答群
ア:Ct値
イ:1回当たりの餌の重量
ウ:1個の餌の重量
エ:給餌開始時のカウント値
オ:給餌終了時のカウント値
力:給餌重量
キ:給餌予定回数
ク:給餌を行った回数
模範解答
c:イ
d:ク
e:ウ
f:オ
解説
解答の論理構成
-
給餌部が求める「実際に給餌した餌の重量」
【問題文】「給餌部は、給餌を行った回数を基に、実際に給餌した餌の重量を求める。」
⇒ 1回当たりの餌の重量 × 給餌を行った回数
よって式の前半 c×d は
c=「1回当たりの餌の重量」(イ)
d=「給餌を行った回数」(ク) -
残餌(食べ残し)の重量
【問題文】「残餌センサは、通過する残餌を1個ずつカウント」
【問題文】「ここで、給餌を行う1個の餌の重量は均一とする。」
【問題文】「終了直前で読み込んだカウント値を、給餌終了時のカウント値とする。」
⇒ 1個の餌の重量 × 給餌終了時のカウント値
よって式の後半 e×f は
e=「1個の餌の重量」(ウ)
f=「給餌終了時のカウント値」(オ) -
食べた餌の重量は
以上より解答は
c:イ、d:ク、e:ウ、f:オ
誤りやすいポイント
- 「給餌重量」を使いたくなる
「給餌重量」はサーバが指示した総量であり、実際に与えた量ではありません。式に入れるのは「1回当たりの餌の重量」です。 - 「Ct値」と「カウント値」の混同
Ct値は5分間の増分、カウント値は累積値です。式で必要なのは累積の「給餌終了時のカウント値」です。 - 「給餌予定回数」と「給餌を行った回数」の取り違え
魚が食べなくなれば予定回数前でも終了するため、実際に与えた回数=「給餌を行った回数」を使います。
FAQ
Q: Ct値は最終的な給餌量計算に全く使われないのですか?
A: いいえ。Ct値は“給餌を続けるか終了するか”の判断材料ですが、残餌の総量を直接表さないため、重量計算式には入りません。
A: いいえ。Ct値は“給餌を続けるか終了するか”の判断材料ですが、残餌の総量を直接表さないため、重量計算式には入りません。
Q: 「1個の餌の重量」が与えられていないと計算できないのでは?
A: 現場では事前に計量し固定値としてシステム登録しておきます。問題では具体的数値より“均一”である事実が重要です。
A: 現場では事前に計量し固定値としてシステム登録しておきます。問題では具体的数値より“均一”である事実が重要です。
Q: カウンタをゼロクリアするのはなぜ必要?
A: 給餌開始前の残餌をリセットし、今回の給餌で発生した残餌のみをカウントするためです。
A: 給餌開始前の残餌をリセットし、今回の給餌で発生した残餌のみをカウントするためです。
関連キーワード: IoT, センサフュージョン、残餌検知、データ分析、自動給餌


