はじめに
初めまして、木村俊星 です。この記事では YOLOv10 を使って MRI 画像から脳腫瘍を検出するモデルを作ります。
記事の背景
ある日、研究室で留学生から以下の論文の結果を再現したいという相談を受けました。
YOLO-v9-YOLO-v11: Brain Tumor Performance Analysis Using MRI Images
彼には Python のプログラミング経験がなかったので、彼が自力でモデルの開発環境を構築できるように、環境構築の手順をまとめることにしました。彼と同様に「YOLO を使って物体検出を試してみたい」と考えている人の参考になれば幸いです。
開発環境
❯ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.5 LTS"
❯ nvidia-smi
Wed Oct 29 00:36:59 2025
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.274.02 Driver Version: 535.274.02 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA RTX 6000 Ada Gene... Off | 00000000:01:00.0 Off | Off |
| 30% 54C P2 277W / 300W | 8181MiB / 49140MiB | 97% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| 0 N/A N/A 1550 G /usr/lib/xorg/Xorg 10MiB |
| 0 N/A N/A 1637 G /usr/bin/gnome-shell 8MiB |
| 0 N/A N/A 1745542 C .../tamaki5h/TransFG/.venv/bin/python3 8146MiB |
+---------------------------------------------------------------------------------------+
環境構築
仮想環境の構築
uv を使ってこのプロジェクト専用の Python 環境を作ります。仮想環境を使うことで、パッケージのバージョンが他のプロジェクトと競合することを防ぎます。uv がまだインストールされていない場合は 公式ドキュメント を参考にしてインストールしてください。
❯ uv init yolo
Initialized project `yolo` at `/path/to/yolo`
❯ cd yolo
今回は Python 3.11 を利用します。これはYOLOv10 が依存している PyTorch 2.0.1 が Python 3.8 - 3.11 で動作するためです [ 1 ]。
カレントディレクトリの以下のファイルを書き換えます。
.python-version
3.11
pyproject.toml
[project]
name = "yolo"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11" # ここを 3.11 にする
dependencies = []
以下のコマンドで .venv を作成します。
❯ uv venv
Using CPython 3.11.3
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
❯ source .venv/bin/activate
今後、このリポジトリで作業する際は、必ずこのディレクトリで source .venv/bin/activate を実行してください。
YOLOv10 の準備
このリポジトリをクローンします。
❯ git clone https://github.com/THU-MIG/yolov10.git
Cloning into 'yolov10'...
remote: Enumerating objects: 20338, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 20338 (delta 2), reused 0 (delta 0), pack-reused 20334 (from 2)
Receiving objects: 100% (20338/20338), 11.10 MiB | 22.33 MiB/s, done.
Resolving deltas: 100% (14354/14354), done.
YOLOv10 の実行に必要なパッケージをインストールします。
❯ cd yolov10
❯ uv pip install -r requirements.txt
Using Python 3.11.3 environment at /home/user/kimura3s/Desktop/research/yolo/.venv
Resolved 101 packages in 1.22s
Prepared 71 packages in 1m 13s
Installed 101 packages in 4.38s
YOLOv10 のリポジトリを編集可能モードでインストールします。これによって、仮想環境が有効化されているときに yolo コマンドが使えるようになります。
❯ pip install -e .
続いて YOLOv10 のチェックポイントを リリースページ から取得します。チェックポイントとは、学習途中のモデルの状態を保存したファイルのことです。論文にはどのチェックポイントを使用したか明記されていなかったので、今回は適当に yolov10m.pt を使用します。
❯ wget https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10m.pt
--2025-10-29 19:23:21-- https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10m.pt
github.com (github.com) をDNSに問いあわせています... 20.27.177.113
github.com (github.com)|20.27.177.113|:443 に接続しています... 接続しました。
...
‘yolov10m.pt’ に保存中
yolov10m.pt 100%[====================================================================================================================>] 63.82M 15.4MB/s in 4.1s
2025-10-29 19:23:26 (15.4 MB/s) - ‘yolov10m.pt’ へ保存完了 [66924323/66924323]
データセットの準備
論文で使用されている以下のデータセットを取得します。
「Fork Dataset」で自分用にデータセットをコピーします。
前処理は実行せず「Create」します。
「Download Dataset」を選択します。
YOLOv10 のアノテーション形式は選択肢にありませんでした。YOLOv10 がサポートしているデータセットの形式は YOLOv8 と同じであると Roboflow のページ に書かれているので、「YOLOv8」を選択しました。
表示されたコマンドをコピーして開発環境で実行します。
❯ cd <any_directory>
❯ mkdir mri-rskcu-gugfv
❯ cd mri-rskcu-gugfv
❯ curl -L "https://app.roboflow.com/ds/***" > roboflow.zip; unzip roboflow.zip; rm roboflow.zip
YOLOv10 の学習
論文で示されているパラメーターの値を参考にして、YOLOv10 に MRI 画像を学習させます。開発環境では学習が終了するまでに少なくとも20分はかかりました。
❯ cd yolov10
❯ yolo detect train \
model=yolov10m.pt \
data=/path/to/your/dataset/data.yaml \
epochs=100 \
batch=16 \
imgsz=640 \
optimizer=SGD \
lr0=0.01 \
lrf=0.1 \
momentum=0.937 \
weight_decay=0.0005 \
name=mri-rskcu-gugfv \
hsv_h=0.015 \
hsv_s=0.7 \
hsv_v=0.4 \
translate=0.2 \
scale=0.5 \
flipud=0.5 \
mosaic=1.0
YOLOv10 の性能評価
学習が終わると、yolov10/runs/detect/mri-rskcu-gugfv/weights/ に best.pt という学習済みのモデルのファイルが作成されます。このモデルの性能を評価用データで評価してみましょう。
❯ yolo val \
data=/path/to/your/dataset/data.yaml \
model=runs/detect/mri-rskcu-gugfv/weights/best.pt \
imgsz=640 \
batch=16 \
verbose=True \
project=runs/val \
name=mri-rskcu-gugfv
Ultralytics YOLOv8.1.34 🚀 Python-3.11.3 torch-2.0.1+cu117 CUDA:0 (NVIDIA RTX 6000 Ada Generation, 48647MiB)
YOLOv10m summary (fused): 369 layers, 16452700 parameters, 0 gradients, 63.4 GFLOPs
val: Scanning /path/to/mri-rskcu-gugfv/valid/labels.cache... 151 images, 0 backgrounds, 0 corrupt: 100%|██████████| 151/151 [00:00<?, ?it/s]
Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 10/10 [00:01<00:00, 9.04it/s]
all 151 178 0.964 0.926 0.96 0.647
Brain-Tumor 151 155 0.942 0.94 0.968 0.658
eye 151 23 0.987 0.913 0.953 0.636
Speed: 0.7ms preprocess, 3.4ms inference, 0.0ms loss, 0.2ms postprocess per image
Results saved to runs/val/mri-rskcu-gugfv
💡 Learn more at https://docs.ultralytics.com/modes/val
Recall の値が大きく異なるのが気になりますが、それ以外の指標は概ね近い値が得られました。
| 評価指標 | 論文の結果 | 今回の結果 |
|---|---|---|
| mAP@0.5 | 0.95 | 0.968 |
| mAP@0.5:0.95 | 0.64 | 0.658 |
| Precision | 0.95 | 0.942 |
| Recall | 0.88 | 0.940 |
まとめ
ここまで読んでいただきありがとうございました。




