AIニュース最前線
最新ニュースAI日報Hacker日報週報動画AIツールトレンド企業

AIニュース最前線

世界中のAI最新情報を日本語で毎時更新

最新ニュース日報トレンド企業プレミアムRSS
© 2026 ainew.jp特定商取引法に基づく表記
ニュース一覧元記事を開く
MarkTechPost·2026年6月12日 16:10·約7分で読める

MONAI を用いた UNet による医療 CT ボリュームの脾臓セグメンテーションのためのコーディング実装

#Medical AI#Computer Vision#MONAI#UNet#Deep Learning
TL;DR

MarkTechPost は、MONAI と UNet を用いた脾臓セグメンテーションの完全なパイプライン構築チュートリアルを公開し、医療画像処理の実装手順と評価手法を詳細に解説している。

AI深層分析2026年6月12日 18:02
3
注目/ 5段階
深度40%
4
関連度30%
4
実用性20%
5
革新性10%
2

キーポイント

1

実用的なエンドツーエンド・パイプラインの構築

Medical Segmentation Decathlon の Task09 データセットを用い、脾臓の 3D セグメンテーションを行うための完全なトレーニングから推論までのワークフローを提示している。

2

高度な医療画像前処理とデータ拡張

方向合わせ、ボクセル間隔正規化、強度ウィンドウ調整、前景クロッピングに加え、ランダムフリップや回転などの強力なデータ拡張を適用してモデルの汎用性を高めている。

3

高性能トレーニングと推論手法の採用

混合精度トレーニング(Mixed Precision)、DiceCE 損失関数、スライディングウィンドウ推論、および Dice ベースの評価指標を組み合わせ、効率的かつ高精度な学習を実現している。

4

可視化とモデル評価の徹底

予測結果と正解ラベル(Ground-truth)の定性的比較や、モデルがどのように学習しているかを理解するための可視化機能を組み込んでいる。

5

データセットとトランスフォームの構築

MONAIのDecathlonDatasetを用いてCTボリュームを読み込み、アライメントやリサンプリングなどの前処理パイプラインを定義し、学習用と検証用のデータローダーを作成します。

6

モデル訓練環境の設定

3D UNetモデルに対してDiceCE損失関数、AdamWオプティマイザ、コサインアニーリングスケジューラ、および混合精度計算(GradScaler)を設定して学習準備を整えます。

7

評価指標と後処理

背景を除外したDiceスコアによる評価メトリクスを定義し、推論結果の解析用(argmax)とラベルの形式統一用(to_onehot)のポストプロセッシングコンポーザを設定します。

影響分析・編集コメントを表示

影響分析

この記事は、MONAI を活用した医療 AI の実装において、理論的な解説だけでなく、実際に動作するコードベースを提供することで開発者の参入障壁を下げている。特に、前処理から推論までの標準化されたワークフローを示すことで、研究コミュニティや産業現場における 3D セグメンテーションモデルの迅速なプロトタイピングと実装を促進する意義が大きい。

編集コメント

医療画像解析の実務において、MONAI の標準的なベストプラクティスを学ぶための非常に有用な実装ガイドです。

このチュートリアルでは、MONAI を用いて Medical Segmentation Decathlon の Task09 データセット上の脾臓をセグメントメントするエンドツーエンドの 3D 医療画像セグメンテーションパイプラインを構築します。体積 CT スキャンを取り扱い、方向整合、ボクセル間隔正規化、強度ウィンドウ処理、前景クロッピング、パッチベースサンプリングといった医療画像変換を適用し、その後、二値臓器セグメンテーションのために 3D UNet モデルを訓練します。また、混合精度トレーニング、DiceCE 損失(Dice Cross-Entropy loss)、スライディングウィンドウ推論、Dice ベースの検証、定性的な可視化を活用して、モデルがどのように学習し、その予測が地上真値マスクとどう比較されるかを理解します。さらに、生体積データから完全な訓練–検証–可視化セグメンテーションシステムへと移行します。

Copy CodeCopiedUse a different Browser

!pip install -q "monai[nibabel,tqdm,matplotlib]==1.5.2" 2>/dev/null

import os, time, glob, tempfile, warnings

import numpy as np

import torch

import matplotlib.pyplot as plt

from torch.amp import autocast, GradScaler

from monai.apps import DecathlonDataset

from monai.data import DataLoader, decollate_batch

from monai.networks.nets import UNet

from monai.networks.layers import Norm

from monai.losses import DiceCELoss

from monai.metrics import DiceMetric

from monai.inferers import sliding_window_inference

from monai.utils import set_determinism

from monai.transforms import (

Compose, LoadImaged, EnsureChannelFirstd, EnsureTyped, Orientationd,

Spacingd, ScaleIntensityRanged, CropForegroundd, RandCropByPosNegLabeld,

RandFlipd, RandRotate90d, RandShiftIntensityd, AsDiscrete,

)

warnings.filterwarnings("ignore")

必要な医療画像処理および可視化の依存関係を備えた MONAI をインストールすることから始めます。その後、データセット、変換(トランスフォーム)、モデル学習、評価指標、推論に必要な PyTorch、NumPy、Matplotlib、および主要な MONAI モジュールをインポートします。また、セグメンテーションワークフローに集中している間、ノートブックの出力をクリーンに保つために警告を抑制しています。

Copy CodeCopiedUse a different Browser

QUICK_RUN = True

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

root_dir = tempfile.mkdtemp()

roi_size = (96, 96, 96)

num_samples = 4

batch_size = 2

max_epochs = 15 if QUICK_RUN else 200

val_every = 3

train_cache = 8 if QUICK_RUN else 24

val_cache = 2 if QUICK_RUN else 6

set_determinism(seed=0)

print(f"Device: {device} | epochs: {max_epochs} | data dir: {root_dir}")

train_transforms = Compose(common + [

image_key="image", image_threshold=0),

RandFlipd(keys=["image", "label"], prob=0.2, spatial_axis=0),

RandFlipd(keys=["image", "label"], prob=0.2, spatial_axis=1),

RandFlipd(keys=["image", "label"], prob=0.2, spatial_axis=2),

RandRotate90d(keys=["image", "label"], prob=0.2, max_k=3),

RandShiftIntensityd(keys=["image"], offsets=0.10, prob=0.5),

EnsureTyped(keys=["image", "label"]),

])

val_transforms = Compose(common + [EnsureTyped(keys=["image", "label"])])

チュートリアルのための主要な設定、つまりデバイス、データセットディレクトリ、パッチサイズ、バッチサイズ、エポック数、キャッシュ設定を定義します。その後、画像の読み込み、アライメントの調整、ボクセル間隔のリサンプリング、強度のスケーリング、前景の切り出しを行うことで、CT ボリューム用の前処理パイプラインを作成します。また、トレーニングと検証の変換も定義しており、トレーニングパイプラインにはランダムなクロップ、フリップ、回転、強度シフトが含まれています。

Copy CodeCopiedUse a different Browser

train_ds = DecathlonDataset(

root_dir=root_dir, task="Task09_Spleen", section="training",

transform=train_transforms, download=True, val_frac=0.2,

cache_num=train_cache, num_workers=2, seed=0)

val_ds = DecathlonDataset(

root_dir=root_dir, task="Task09_Spleen", section="validation",

transform=val_transforms, download=False, val_frac=0.2,

cache_num=val_cache, num_workers=2, seed=0)

train_loader = DataLoader(train_ds, batch_size=batch_size, shuffle=True,

num_workers=2, pin_memory=torch.cuda.is_available())

val_loader = DataLoader(val_ds, batch_size=1, shuffle=False,

num_workers=1, pin_memory=torch.cuda.is_available())

print(f"Train volumes: {len(train_ds)} | Val volumes: {len(val_ds)}")

loss_fn = DiceCELoss(to_onehot_y=True, softmax=True)

optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4, weight_decay=1e-5)

scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=max_epochs)

scaler = GradScaler("cuda", enabled=torch.cuda.is_available())

dice_metric = DiceMetric(include_background=False, reduction="mean")

post_pred = Compose([AsDiscrete(argmax=True, to_onehot=2)])

post_label = Compose([AsDiscrete(to_onehot=2)])

MONAI の DecathlonDataset を用いて、Medical Segmentation Decathlon Task09 Spleen データセットを読み込みます。データをトレーニングセットとバリデーションセットに分割し、適切なトランスフォームを適用した上で、両方のデータセットを PyTorch スタイルのデータローダーでラップします。その後、3D UNet モデルを作成し、DiceCE 損失(Dice Cross-Entropy loss)を定義し、AdamW オプティマイザ、学習率スケジューラ、混合精度スケーラ、Dice メトリック、および後処理ステップを設定します。

Copy CodeCopiedUse a different Browser

best_dice, best_epoch = -1.0, -1

loss_hist, dice_hist, dice_epochs = [], [], []

best_path = os.path.join(root_dir, "best_spleen_unet.pth")

for epoch in range(1, max_epochs + 1):

model.train(); epoch_loss, t0 = 0.0, time.time()

for batch in train_loader:

x, y = batch["image"].to(device), batch["label"].to(device)

optimizer.zero_grad(set_to_none=True)

with autocast("cuda", enabled=torch.cuda.is_available()):

logits = model(x)

loss = loss_fn(logits, y)

scaler.scale(loss).backward()

scaler.step(optimizer); scaler.update()

epoch_loss += loss.item()

scheduler.step()

epoch_loss /= len(train_loader); loss_hist.append(epoch_loss)

print(f"[{epoch:3d}/{max_epochs}] loss={epoch_loss:.4f} "

f"lr={scheduler.get_last_lr()[0]:.2e} ({time.time()-t0:.0f}s)")

if epoch % val_every == 0 or epoch == max_epochs:

model.eval(); dice_metric.reset()

with torch.no_grad():

for vb in val_loader:

vx, vy = vb["image"].to(device), vb["label"].to(device)

with autocast("cuda", enabled=torch.cuda.is_available()):

vout = sliding_window_inference(vx, roi_size, 4, model,

overlap=0.5)

vout = [post_pred(o) for o in decollate_batch(vout)]

vlab = [post_label(o) for o in decollate_batch(vy)]

dice_metric(y_pred=vout, y=vlab)

d = dice_metric.aggregate().item()

dice_hist.append(d); dice_epochs.append(epoch)

if d > best_dice:

best_dice, best_epoch = d, epoch

torch.save(model.state_dict(), best_path)

print(f" >> val Dice={d:.4f} (best={best_dice:.4f} @ {best_epoch})")

print(f"\nDone. Best mean Dice {best_dice:.4f} at epoch {best_epoch}.")

スプラインデータセットから切り出された体積パッチに対して3D UNetを各エポックごとに訓練する完全な学習ループを実行します。GPUが利用可能な場合は、自動混合精度を使用してメモリ使用量を削減し、学習速度を向上させます。また、スライディングウィンドウ推論を用いて定期的にモデルを検証し、Diceスコアを追跡して、最もパフォーマンスの高いチェックポイントも保存します。

Copy CodeCopiedUse a different Browser

fig, ax = plt.subplots(1, 2, figsize=(12, 4))

ax[0].plot(range(1, len(loss_hist)+1), loss_hist, "-o", ms=3)

ax[0].set(title="Training loss", xlabel="epoch", ylabel="DiceCE loss")

ax[1].plot(dice_epochs, dice_hist, "-o", color="seagreen", ms=4)

ax[1].set(title="Validation mean Dice", xlabel="epoch", ylabel="Dice"); ax[1].set_ylim(0, 1)

plt.tight_layout(); plt.show()

model.load_state_dict(torch.load(best_path, map_location=device)); model.eval()

with torch.no_grad():

sample = next(iter(val_loader))

img = sample["image"].to(device)

with autocast("cuda", enabled=torch.cuda.is_available()):

pred = sliding_window_inference(img, roi_size, 4, model, overlap=0.5)

pred = torch.argmax(pred, dim=1).cpu().numpy()[0]

img_np, lab_np = img.cpu().numpy()[0, 0], sample["label"].numpy()[0, 0]

z = int(np.argmax(lab_np.sum(axis=(0, 1))))

fig, ax = plt.subplots(1, 3, figsize=(13, 5))

ax[0].imshow(img_np[:, :, z], cmap="gray"); ax[0].set_title("CT slice")

ax[1].imshow(lab_np[:, :, z], cmap="viridis"); ax[1].set_title("Ground truth")

ax[2].imshow(pred[:, :, z], cmap="viridis"); ax[2].set_title("Prediction")

for a in ax: a.axis("off")

plt.tight_layout(); plt.show()

まず、トレーニングの損失と検証 Dice スコアをプロットして、モデルが時間とともにどのように改善するかを確認します。次に、最良の保存済みモデルチェックポイントを読み込み、スライディングウィンドウ予測を使用して単一の検証ボリュームに対して推論を実行します。CT 断層画像、正解マスク、および予測セグメンテーションを並べて可視化し、モデルの定性的な性能を検証します。

結論として、3D UNet モデルを用いた MONAI ベースの実用的な 3D 脾臓セグメンテーションワークフローを完了しました。Medical Segmentation Decathlon データセットを用意し、CT ボリュームを変換・拡張し、DiceCE 損失(DiceCE loss)でモデルをトレーニングし、スライディングウィンドウ推論で検証し、時間経過に伴う損失と Dice スコアを追跡しました。また、CT 断層画像、正解ラベル、およびモデル出力を並べて比較することで、最終的な予測結果を視覚的に確認しました。これで、データ読み込みや前処理からモデルトレーニング、評価、チェックポイント保存、定性的分析に至るまで、MONAI が医療セグメンテーションタスクをどのようにサポートするかを明確に理解できました。

ノートブック付きの完全なコードをチェックしてください。また、Twitter でフォローすることもお気軽にどうぞ。150k 人以上の ML SubReddit に参加することや、ニュースレターを購読することを忘れないでください。待ってください!Telegram をご利用ですか?今なら Telegram でも私たちに参加できます。

GitHub リポジトリの宣伝、Hugging Face ページ、製品リリース、ウェビナーなどのプロモーションのためにパートナーシップをご希望ですか?私たちに連絡してください

The post A Coding Implementation on MONAI for End-to-End 3D Spleen Segmentation Using UNet on Medical CT Volumes appeared first on MarkTechPost.

原文を表示

In this tutorial, we build an end-to-end 3D medical image segmentation pipeline using MONAI to segment the spleen on the Medical Segmentation Decathlon Task09 dataset. We work with volumetric CT scans, apply medical imaging transformations such as orientation alignment, voxel-spacing normalization, intensity windowing, foreground cropping, and patch-based sampling, and then train a 3D UNet model for binary organ segmentation. We also use mixed precision training, DiceCE loss, sliding-window inference, Dice-based validation, and qualitative visualization to understand how the model learns and how its predictions compare with the ground-truth masks. Also, we move from raw medical volumes to a complete train–validate–visualize segmentation system.

Copy CodeCopiedUse a different Browser

!pip install -q "monai[nibabel,tqdm,matplotlib]==1.5.2" 2>/dev/null

import os, time, glob, tempfile, warnings

import numpy as np

import torch

import matplotlib.pyplot as plt

from torch.amp import autocast, GradScaler

from monai.apps import DecathlonDataset

from monai.data import DataLoader, decollate_batch

from monai.networks.nets import UNet

from monai.networks.layers import Norm

from monai.losses import DiceCELoss

from monai.metrics import DiceMetric

from monai.inferers import sliding_window_inference

from monai.utils import set_determinism

from monai.transforms import (

Compose, LoadImaged, EnsureChannelFirstd, EnsureTyped, Orientationd,

Spacingd, ScaleIntensityRanged, CropForegroundd, RandCropByPosNegLabeld,

RandFlipd, RandRotate90d, RandShiftIntensityd, AsDiscrete,

)

warnings.filterwarnings("ignore")

We start by installing MONAI with the required medical imaging and visualization dependencies. We then import PyTorch, NumPy, Matplotlib, and the main MONAI modules needed for datasets, transforms, model training, metrics, and inference. We also suppress warnings to keep the notebook output clean while we focus on the segmentation workflow.

Copy CodeCopiedUse a different Browser

QUICK_RUN = True

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

root_dir = tempfile.mkdtemp()

roi_size = (96, 96, 96)

num_samples = 4

batch_size = 2

max_epochs = 15 if QUICK_RUN else 200

val_every = 3

train_cache = 8 if QUICK_RUN else 24

val_cache = 2 if QUICK_RUN else 6

set_determinism(seed=0)

print(f"Device: {device} | epochs: {max_epochs} | data dir: {root_dir}")

train_transforms = Compose(common + [

image_key="image", image_threshold=0),

RandFlipd(keys=["image", "label"], prob=0.2, spatial_axis=0),

RandFlipd(keys=["image", "label"], prob=0.2, spatial_axis=1),

RandFlipd(keys=["image", "label"], prob=0.2, spatial_axis=2),

RandRotate90d(keys=["image", "label"], prob=0.2, max_k=3),

RandShiftIntensityd(keys=["image"], offsets=0.10, prob=0.5),

EnsureTyped(keys=["image", "label"]),

])

val_transforms = Compose(common + [EnsureTyped(keys=["image", "label"])])

We define the main configuration for the tutorial, including the device, dataset directory, patch size, batch size, number of epochs, and cache settings. We then create the preprocessing pipeline for CT volumes by loading images, aligning orientation, resampling voxel spacing, scaling intensities, and cropping the foreground. We also define the training and validation transforms, with the training pipeline including random crops, flips, rotations, and intensity shifts.

Copy CodeCopiedUse a different Browser

train_ds = DecathlonDataset(

root_dir=root_dir, task="Task09_Spleen", section="training",

transform=train_transforms, download=True, val_frac=0.2,

cache_num=train_cache, num_workers=2, seed=0)

val_ds = DecathlonDataset(

root_dir=root_dir, task="Task09_Spleen", section="validation",

transform=val_transforms, download=False, val_frac=0.2,

cache_num=val_cache, num_workers=2, seed=0)

train_loader = DataLoader(train_ds, batch_size=batch_size, shuffle=True,

num_workers=2, pin_memory=torch.cuda.is_available())

val_loader = DataLoader(val_ds, batch_size=1, shuffle=False,

num_workers=1, pin_memory=torch.cuda.is_available())

print(f"Train volumes: {len(train_ds)} | Val volumes: {len(val_ds)}")

loss_fn = DiceCELoss(to_onehot_y=True, softmax=True)

optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4, weight_decay=1e-5)

scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=max_epochs)

scaler = GradScaler("cuda", enabled=torch.cuda.is_available())

dice_metric = DiceMetric(include_background=False, reduction="mean")

post_pred = Compose([AsDiscrete(argmax=True, to_onehot=2)])

post_label = Compose([AsDiscrete(to_onehot=2)])

We load the Medical Segmentation Decathlon Task09 Spleen dataset using MONAI’s DecathlonDataset. We split the data into training and validation sections, apply the appropriate transforms, and wrap both datasets with PyTorch-style data loaders. We then create a 3D UNet model, define the DiceCE loss, set up the AdamW optimizer, learning-rate scheduler, mixed-precision scaler, Dice metric, and post-processing steps.

Copy CodeCopiedUse a different Browser

best_dice, best_epoch = -1.0, -1

loss_hist, dice_hist, dice_epochs = [], [], []

best_path = os.path.join(root_dir, "best_spleen_unet.pth")

for epoch in range(1, max_epochs + 1):

model.train(); epoch_loss, t0 = 0.0, time.time()

for batch in train_loader:

x, y = batch["image"].to(device), batch["label"].to(device)

optimizer.zero_grad(set_to_none=True)

with autocast("cuda", enabled=torch.cuda.is_available()):

logits = model(x)

loss = loss_fn(logits, y)

scaler.scale(loss).backward()

scaler.step(optimizer); scaler.update()

epoch_loss += loss.item()

scheduler.step()

epoch_loss /= len(train_loader); loss_hist.append(epoch_loss)

print(f"[{epoch:3d}/{max_epochs}] loss={epoch_loss:.4f} "

f"lr={scheduler.get_last_lr()[0]:.2e} ({time.time()-t0:.0f}s)")

if epoch % val_every == 0 or epoch == max_epochs:

model.eval(); dice_metric.reset()

with torch.no_grad():

for vb in val_loader:

vx, vy = vb["image"].to(device), vb["label"].to(device)

with autocast("cuda", enabled=torch.cuda.is_available()):

vout = sliding_window_inference(vx, roi_size, 4, model,

overlap=0.5)

vout = [post_pred(o) for o in decollate_batch(vout)]

vlab = [post_label(o) for o in decollate_batch(vy)]

dice_metric(y_pred=vout, y=vlab)

d = dice_metric.aggregate().item()

dice_hist.append(d); dice_epochs.append(epoch)

if d > best_dice:

best_dice, best_epoch = d, epoch

torch.save(model.state_dict(), best_path)

print(f" >> val Dice={d:.4f} (best={best_dice:.4f} @ {best_epoch})")

print(f"\nDone. Best mean Dice {best_dice:.4f} at epoch {best_epoch}.")

We run the full training loop, where each epoch trains the 3D UNet on cropped volumetric patches from the spleen dataset. We use automatic mixed precision to reduce memory usage and speed up training when a GPU is available. We also validate the model at regular intervals using sliding-window inference, track the Dice score, and save the best-performing checkpoint.

Copy CodeCopiedUse a different Browser

fig, ax = plt.subplots(1, 2, figsize=(12, 4))

ax[0].plot(range(1, len(loss_hist)+1), loss_hist, "-o", ms=3)

ax[0].set(title="Training loss", xlabel="epoch", ylabel="DiceCE loss")

ax[1].plot(dice_epochs, dice_hist, "-o", color="seagreen", ms=4)

ax[1].set(title="Validation mean Dice", xlabel="epoch", ylabel="Dice"); ax[1].set_ylim(0, 1)

plt.tight_layout(); plt.show()

model.load_state_dict(torch.load(best_path, map_location=device)); model.eval()

with torch.no_grad():

sample = next(iter(val_loader))

img = sample["image"].to(device)

with autocast("cuda", enabled=torch.cuda.is_available()):

pred = sliding_window_inference(img, roi_size, 4, model, overlap=0.5)

pred = torch.argmax(pred, dim=1).cpu().numpy()[0]

img_np, lab_np = img.cpu().numpy()[0, 0], sample["label"].numpy()[0, 0]

z = int(np.argmax(lab_np.sum(axis=(0, 1))))

fig, ax = plt.subplots(1, 3, figsize=(13, 5))

ax[0].imshow(img_np[:, :, z], cmap="gray"); ax[0].set_title("CT slice")

ax[1].imshow(lab_np[:, :, z], cmap="viridis"); ax[1].set_title("Ground truth")

ax[2].imshow(pred[:, :, z], cmap="viridis"); ax[2].set_title("Prediction")

for a in ax: a.axis("off")

plt.tight_layout(); plt.show()

We first plot the training loss and validation Dice score to see how the model improves over time. We then reload the best-saved model checkpoint and run inference on a single validation volume using sliding-window prediction. We visualize the CT slice, ground-truth mask, and predicted segmentation side by side to inspect the model’s qualitative performance.

In conclusion, we finished a practical MONAI-based workflow for 3D spleen segmentation using a 3D UNet model. We prepared the Medical Segmentation Decathlon dataset, transformed and augmented the CT volumes, trained the model with DiceCE loss, validated it using sliding-window inference, and tracked both loss and Dice score over time. We also inspected the final prediction visually by comparing the CT slice, ground-truth label, and model output side by side. Now, we have a clear understanding of how MONAI supports medical segmentation tasks from data loading and preprocessing to model training, evaluation, checkpointing, and qualitative analysis.

Check out the Full Codes with Notebook. Also, feel free to follow us on Twitter and don’t forget to join our 150k+ ML SubReddit and Subscribe to our Newsletter. Wait! are you on telegram? now you can join us on telegram as well.

Need to partner with us for promoting your GitHub Repo OR Hugging Face Page OR Product Release OR Webinar etc.? Connect with us

The post A Coding Implementation on MONAI for End-to-End 3D Spleen Segmentation Using UNet on Medical CT Volumes appeared first on MarkTechPost.

この記事をシェア

関連記事

AI News★42026年6月19日 00:57

コンピュータビジョンの導入が小売業の生産性向上を牽引

オペレーターが物理的な棚の追跡を自動化することで、利益率の低下を防ぎ、業界全体で数十億ドル規模のコスト削減を実現している。Coresight Researchと技術プロバイダーのSimbe、RELEX Solutionsによる調査がその効果を算出している。

MIT ML News★42026年6月17日 13:00

AI が鍵の置き場所を特定できるか?

MIT の研究者が、ロボットが複雑な大規模環境の詳細な心理モデルを迅速に形成・想起できる長期記憶フレームワークを開発した。これにより、人間と並んで働くロボットの空間時間的記憶能力が向上する可能性がある。

TechCrunch AI★42026年6月15日 21:00

衛星が自律的に物体を検出可能に — その意味とは

人工衛星が自律的に地上の物体を検出する技術を習得した。これにより、通信遅延を減らし、リアルタイムでの監視能力が向上する可能性がある。

今日のまとめ

AI日報で今日の重要ニュースをまとめ読み

ニュース一覧に戻る元記事を読む