1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

YOLOv10 を使って MRI 画像から脳腫瘍を検出する

1
Last updated at Posted at 2025-11-04

はじめに

初めまして、木村俊星 です。この記事では 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」で自分用にデータセットをコピーします。

roboflow.png

前処理は実行せず「Create」します。

roboflow.png

「Download Dataset」を選択します。

roboflow.png

YOLOv10 のアノテーション形式は選択肢にありませんでした。YOLOv10 がサポートしているデータセットの形式は YOLOv8 と同じであると Roboflow のページ に書かれているので、「YOLOv8」を選択しました。

roboflow.png

表示されたコマンドをコピーして開発環境で実行します。

roboflow.png

 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

まとめ

ここまで読んでいただきありがとうございました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?