目次- プロジェクト概要
- 明らかなバグ修正
- 必要なファイル追加
- 落としやすいポイント
- その他の注意点
プロジェクト概要
GitHubリポジトリ:https://github.com/xorangecheng/GlobalGuidance-Net 論文リンク(2021年MIA論文):https://www.sciencedirect.com/science/article/pii/S1361841521000359 GitHubで公開されているコードにはいくつかの問題点があるため、本記事では修正方法を解説します。
明らかなバグ修正
train.pyにおけるlog_pathの設定 以下のように修正してください:
time_stamp = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
log_file_path = os.path.join(ckpt_path, exp_name, f"{time_stamp}.txt") # ログファイルのパス
元のコードでのlog_pathの定義にはコロンが含まれており、その後の処理でファイルを開けなくなる問題があります。
2. train.pyでのデータ読み込み
ImageFolderではなくImageFolder2を使用してください。理由はdataset.pyを参照してください。
3. train.pyのdef train内にある勾配異常検出のコードを削除
with autograd.detect_anomaly():はデバッグ用のコードです。
4. train.pyのdef test内でwとhが入れ替わっています
1つのfoldの実行後にエラーで停止する問題を修正します:
# 画像の読み込みと前処理
medical_image = Image.open(img_path).convert('RGB')
image_width, image_height = medical_image.size # この行を修正
img_var = Variable(img_transform(medical_image).unsqueeze(0)).cuda()
必要なファイル追加
- ResNext事前学習モデル
resnext_101_32x4d.ptファイルをダウンロードし、modeling\backbone\resnextパスに配置してください ダウンロードリンク:https://drive.google.com/file/d/1dnH-IHwmu9xFPlyndqI6MfF4LvH6JKNQ/view SynchronizedBatchNorm2d関連のコード 複数ファイル内の関連するステートメントをコメントアウトしてください。作者は提供していません。datasetフォルダに不足している__init__.pyファイル 空のファイルを新しく作成してください。modeling\backboneパス下の__init__.pyファイル インポートされるべきbackboneモデルのいくつかは関連ファイルが提供されておらず、他にも小さなエラーがあります。以下のように修正してください:
# from modeling.backbone import resnet, xception, drn, mobilenet,daf,daf_ds,dense,xception_glb,daf_ds_wrte
from modeling.backbone import resnet, drn, mobilenet, daf_ds, dense
from .resnext.resnext101_regular import ResNeXt101
from .daf_ds import daf_ds
def build_backbone(backbone_name, output_stride, BatchNorm):
if backbone_name == 'resnet':
return resnet.ResNet101(output_stride, BatchNorm)
#elif backbone_name == 'xception':
# return xception.AlignedXception(output_stride, BatchNorm)
elif backbone_name == 'drn':
return drn.drn_d_54(BatchNorm)
elif backbone_name == 'mobilenet':
return mobilenet.MobileNetV2(output_stride, BatchNorm)
elif backbone_name=='daf_ds':
return daf_ds() # この行を修正
elif backbone_name=='dense':
return dense.Dense()
#elif backbone_name == 'xception_glb':
# return xception_glb.AlignedXception(output_stride, BatchNorm)
else:
raise NotImplementedError
同様に、daf_ds.pyのimportも以下のように修正してください(主な変更は最後の3行):
import math
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.utils.model_zoo as model_zoo
# from modeling.sync_batchnorm.batchnorm import SynchronizedBatchNorm2d
# from modeling.backbone.resnext import ResNeXt101
from .resnext.resnext101_regular import ResNeXt101
落としやすいポイント
データフォルダの命名は非常に厳格であり、作者はreadmeに記述していません。以下の要件を満たしてください:画像をimagesフォルダに、マスクをsegフォルダに配置し、マスクのファイル名は画像ファイル名に_maskを追加したものにしてください。
その他の注意点
pydensecrfのインストール:conda install -c conda-forge pydensecrfを使用するとスムーズにインストールできます。それ以外の方法では様々なエラーが発生しやすいです。