まだタイトルない

アウトプット用です

【本読んだ】Kaggleコンペティション チャレンジブック

こんにちは

昨年末に発売された「Kaggleコンペティション チャレンジブック」を買って、スタバとかでゆっくり読み進めてようやく読み終わりました。

Kaggleコンペティション チャレンジブック

Kaggleコンペティション チャレンジブック

  • 作者:Jung Kweon Woo
  • 発売日: 2020/12/28
  • メディア: 単行本(ソフトカバー)

実際にkaggleでメダルを取ったコードの解説を読める本

この本の特徴は過去のkaggleコンペティションを4つピックアップして、EDA、baselineモデルの解説をじっくり行い、入賞者が公開したコードを元に筆者が解説を加えながら紐解いていくというところにあります。 また、テーブル、音声、画像と分野が広いだけでなく、GBDT,pytorch,kerasのコードが扱われているところも美味しさの一つだと思います。

選ばれているコンペ

実際にピックされているコンペと、どんなデータのコンペか等は下記のようになっています。

Santander Product Recommendation

コンペティションページ

  • 開催時期
    • 2016年10月-2016年12月
  • テーブルデー
  • 多クラス分類
  • xgboost,lightgbm

TensorFlow Speech Recognition Challenge

コンペティションページ

  • 開催時期
    • 2017年11月-2018年1月
  • 音声データ
  • 多クラス分類
  • pytorch

Porto Seguro’s Safe Driver Prediction

コンペティションページ

  • 開催時期
    • 2017年9月-2017年11月
  • テーブルデー
  • 二重クラス分類
  • lightgbm,keras

State Farm Distracted Driver Detection

コンペティションページ

  • 開催時期
    • 2016年4月-2016年8月
  • 画像データ
  • 多クラス分類
  • keras

感想

執筆、翻訳を経ているためしょうがないですが取り扱ってるコンペがやや昔のものになっているということは留意して手にする必要はあると思いました。それでもEDAの解説はかなり丁寧にされていて貴重な一冊だと思います。もし今後取り組むコンペに類似するものがこの本にピックされていたら活躍するのではないでしょうか?

【atmaCup】初めてatmaCupに参加してきました。

f:id:teyoblog:20210313200229p:plain:w400

こんにちは
3/5-3/13の期間で開催されていたatmaCupという機械学習コンペに初めて参加してきました。

public119->private143(↓24)/298(サブしてる人数)と結果は振るわなかったですがとてもいい経験になりました。

コンペサイト→#10 [初心者歓迎!] atmaCup

コンペ関係者の皆様、このような機会を設けていただきありがとうございます。
入賞者の方々、おめでとうございます。
参加者の方々、お疲れさまでした!

なぜ参加したか

atmaCupについては#6の頃から認知はしていました。なぜ参加してなかったかというと、kaggleのコンペマスターを目指していたからです。

ではなぜ今回参加したのかというと、日本語で情報収集ができると思ったからです。[初心者向]と書いてあったことも大きいですが、やはり日本語で学ぶことができることは大きいです。

思ったとおりだった?

思ったとおりでした。いや、それ以上のものがありました。

なにがよかった?

下記、良かったと思うものを並べていきます。atmaCup未参加の方に魅力が一つでも伝わればと思います。

公式の初心者向け講座が神だった

初心者向け?ということで、nyker_gotoさんによる講座がありました。

www.youtube.com

www.youtube.com

今回のコンペのデータを題材にして、分析やアプローチに関するyoutube liveがありました。これがとても勉強になりまして、もし周りで機械学習コンペに挑戦してみたい人がいたらとりあえずこれを見なさいと言っていきたいです。

Kaggler-ja Wikiに載ってもいいと思う

日本語のディスカッション

自分はふだんkaggleをやっているので、そこにいる日本の方含めて基本的には英語でのコミュニケーションになります。今回始めて日本語で議論されている環境に入ってなんだか裸の付き合いをしているようなこっ恥ずかしさを感じたりもしましたが、やはり日本語で情報が書かれているのはとても助かりました。

なんとなく情報の質もいいような気も・・・?

www.guruguru.science
最近テーブルコンペで名前を聞くようになってきたTabNetの話題

www.guruguru.science
猛者の知見

www.guruguru.science
自然言語へのアプローチ

www.guruguru.science
ドメインに少し詳しくなれるもの

データ規模

他の回に参加していないのでなんとも言えないですが、今回のデータは比較的小規模なテーブルデータで入門にもいじくり回しやすい点もいいと思いました。

自分の取り組み

怠惰かましてしまいましてあまり出来ませんでしたが今回の自分の取り組みを・・・

  • 初心者講座の写経
    • まずは講座の内容を自分で実装してみました。
    • CV:1.1219,LB:1.1048
  • ディスカッションからピックアップして見る
  • 最後に少しだけチューニングとアンサンブル
    • LB:1.0134

最終的に特徴量重要度は下記のようになりました。

f:id:teyoblog:20210313200954p:plain

BERTや他のディスカッションを読み切る時間はありませんでした。

これまでkaggleで1週間でサブで来たことがなかったので、1週間という期間の中でサブして、少し実験してというのはいい経験になったと思います。もっと強くなってまた戦いに来たいです。

終わりに

またtwitter等で募集をするのですが、 GWを期間に含むkaggleコンペにチームで参加したいです。仲間に入れてくれる方、興味が有る方からの連絡待っています。

分析コンペ勉強会で勉強してきた。 #33dsoc

※ほぼ日記です。

こんにちは、面白そうな勉強会があったので聴講してきました。1
何れの発表も発表者様の考えがうまく言語化されていてとても勉強になると同時に、考えを言語化する力の凄さを感じました。

具体的には下記のような能力についてでしょうか。考えて、試して、振り返って、力にすることの大切さを改めて学ぶことが出来ました。

  • 課題の中にある課題を理解し、分解し、置換して事例を探したり解決する力
  • 自分とトッププレイヤーの力の差をうまく測ること
  • コンペとして(機械学習で解決する対象として)適切かどうか審判する力
  • 多用なリソースを使いこなる力
  • ノイズに立ち向かう力
  • より効果的にコンペのスコアを上げる力

メモ

下記に書く発表中に取ったメモというか感想を乗っけときます。なかなか伝わらないと思うので資料を確認出来次第リンクをはろうと思います。

■脱! Deepでポン🎶ハイパラチューニング芸人を卒業するために

  • 資料
  • 課題を理解・分解・置換する
  • コンペの難しい部分を理解する
  • 課題の調べ方も工夫すると良い
  • 難しいポイント(ノイズや、CV,LB相関)はディスカッションでわかることも多い印象なので、そこから自分なりに分解してどうするかまで考えることでやることが見えてくるのかなと感じた

■atmaCup#6 を開催したときの体制や流れについて

  • コンペを開催することで得られるもの
    • トッププレイヤーのソリューション
    • EDA等の知見
    • 自前でやることと比較してレベルの差等の情報収集
  • もちろん人事、法務のちからもあってコンペの準備をしていく
  • お互い(課題提供側とプラットフォーム側で)解いてみて精度の差を確認
    • 大きいと見落としポイントがあるかも?
  • shakeやleakの確認

■Colaboratoryで分析コンペをする時のテクニック集

  • 資料
  • (環境的に)汎用的なコードを書くと空いてるリソースで学習をできる
  • colabからkaggleデータセットの新規作成や進バージョンもできるので使いこなすことで手札が増える

■Noisy label 対抗記 ~Cassava Leaf Disease Classification~

  • noisy label に立ち向かう
    • アンサンブルで対抗
    • lossで対抗
  • バッチノーマライゼーションを前半は固定
  • confident learning
  • clean lab

■atmaCupなど短期間コンペのススメと戦い方について

  • 資料
  • 息子さんの写真でにやけちゃいました
  • 短期間コンペと長期間コンペの最終的な精度の内訳についての説明がわかりやすかった
    • 長期間:できる限り全部のアイデアを組み込まないと勝てない
    • 短期間:いかに重要なアイデアを組み込むか
  • 効果 x 実装時間 x 成功確率 から効果的にアイデアを絞っていく
  • 短期間で勝つためのノウハウだがkaggleにおいても実装力が低い現段階で次何やるとLBを登れるかという選択の参考になりました。

Cassavaコンペ中に学んだことや自分用メモ

こんにちは

今回はCassavaコンペ期間中に導入したことや、自分用のメモを書きます。

HydraとMLflow Trackingの導入

下記サイトにお世話になりました。

小さくMLOpsを始めてみようと言うことで今回は2つのツールを入れてみました。鳥コンペの頃に参考にしたnotebookの影響でもともとyamlでコンフィグを書いていたのでHydraに関してはそこまで難しく有りませんでした。

MLFlowに関しては、ハイパラ管理のすすめ -ハイパーパラメータをHydra+MLflowで管理しよう-で紹介されていたwriterを使わさせていただきました。本当はコンペフォルダ直下のmlrunsフォルダに記録をして行きたかったのですがどうしても出来なかったです。ただ、デフォルトでD直下に一応安定して記録されるためそこで妥協しました。コマンドライン立ち上げてDに移動してmlflow uiすれば済むので案外楽です。

実際のコードではHydraのデコレータをmainに付与しておけばconfigを読み込めます。

@hydra.main(config_name="config/config")
def main(cfg: DictConfig):
    # 個人的にはこっちの書き方より
    exp_name = cfg.exp_name
    # こっちの書き方のほうが、kaggleに持っていったときも動くので好きです。
    exp_name = cfg['exp_name']

Hydraのマルチラン機能を実行した場合別々のグラフになってくれるので嬉しいです。 python train_exp15.py -m optimizer.name=SGD optimizer.params.lr=1.0e-5,1.0e-4,1.0e-3,1.0e-2

f:id:teyoblog:20210221200120p:plain

run nameも最悪あとから Rename 出来ます。 f:id:teyoblog:20210221200130p:plain

timmの使用

pytorchで学習済みモデルを使うにはtorchvisionで使うことも出来ますが、今回はtimmを使用。様々なモデルを使えるので、初心者はここで使えるものから選ぶだけで十分だと思います。また、コンペ期間中にvit_deit_base_patch16_384が使えるようになりと後進も頻繁にされているようです。

小噺になりますが、kaggleのTPU環境は最新環境しか選べないようでpytorch側の仕様変更1でtimmのimportでエラーがでるようになりました。しかし数日の間にtimmのほうが仕様変更に対応してくれたため、コンペ期間中にTPUでの学習を継続して行うことが出来ました。

timmのインポート

kaggle内のdataset2として上げてくれている人がいるのでそれをinputに追加することで使えます。この方法だとインターネットが使用できない推論用ノートブックでも使用可能。

import sys
sys.path.append('../input/pytorch-image-models/pytorch-image-models-master')

import timm

上記のように最新版をほしいときは直接参照する。今回は推論はGPUでするため、学習時は仕様変更対応バージョンを使って、推論時はDatasetのものを使いました。

!pip install git+https://github.com/rwightman/pytorch-image-models.git

import timm

モデル準備周りの自分用メモ

モデルの取得

model = timm.create_model(model_name, pretrained=pretrained)
imagenet用で最後が1000クラスになっているため、全結合層をタスクにあったものに差し替える。(図の最後のfcの部分) f:id:teyoblog:20210221200215p:plain

# 最終層の差し替え(キャッサバコンペは5クラス分類)
n_features = model.fc.in_features
model.fc = nn.Linear(n_features, 5)

resnet系だとfc,efficientnetはclassifier,ViTはheadになっているため注意が必要

Finetuning

モデルの最終層以外のrequires_gradをFalseにすることでパラメータが更新されることを防ぐ。公開ノートできれいな実装があったため、今後もこれにお世話になると思います。

class CustomResNext(nn.Module):
    def __init__(self, model_name='resnext50_32x4d', pretrained=False):
        super().__init__()
        self.model = timm.create_model(model_name, pretrained=pretrained)
        n_features = self.model.fc.in_features
        self.model.fc = nn.Linear(n_features, CFG.target_size)

    def forward(self, x):
        x = self.model(x)
        return x
    
    def freeze(self):
        # To freeze the residual layers
        for param in self.model.parameters():
            param.requires_grad = False

        for param in self.model.fc.parameters():
            param.requires_grad = True
    
    def unfreeze(self):
        # Unfreeze all layers
        for param in self.model.parameters():
            param.requires_grad = True

model_name = 'resnext50_32x4d'
if model_name=='resnext50_32x4d':
    model = CustomResNext(model_name, pretrained=True)
model.freeze()
学習したモデルの取り回し

trainデータで学習したものを保存して、testデータを推論するときに読み込んで使います。困ったときはココにいつも見に行っています。今回のコンペ期間中にはTPU上でmodelを保存してしまいサルベージが必要になったり、model.state_dictとカッコを忘れてしまって学習し直しになったりしました・・・。

  1. statedict()
# セーブ
torch.save(model.state_dict(), PATH)

# ロード
model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH))
model.eval()
  1. モデル全体
# セーブ
torch.save(model, PATH)
# ロード
model = torch.load(PATH)
model.eval()
  • 保存時と違うデバイスでロードするときはmodel.load_state_dict(torch.load(PATH, map_location=device))とデバイスを指定する

TTA

TTAchを使ってTTAをしました。 学習時のData augmentationは確率的に事前設定した処理を掛け合わせる(例:1/2の確率で左右反転させる)のですが、TTAでは左右反転させたものとさせてないものの2枚の推論結果を使います。それが通常のTransformsでうまく出来ているのかわからなかったため、これでやりました。7種の変換をカスタムして、modelをラッパーすればいいです。推論結果の混ぜ方も選択できます。 コンペ中の推論は下記のようにやってましたが上手な回し方なのかはわかりません。

def inference(model, states, test_loader, device):
    model.to(device)
    tk0 = tqdm(enumerate(test_loader), total=len(test_loader))
    probs = []
    for i, (images) in tk0:
        images = images.to(device)
        avg_preds = []
        for state in states:
            model.load_state_dict(state['model'])
            model.eval()
            transforms = tta.Compose(
                 [
                     tta.HorizontalFlip(),
                     tta.VerticalFlip(),
                     #tta.Rotate90(angles=[0, 90, 180]),
                     #tta.Multiply(factors=[0.9, 1, 1.1]),     
                 ])
            tta_models = []
            tta_models.append(tta.ClassificationTTAWrapper(model, transforms,merge_mode='mean'))
            for net in tta_models:
                with torch.no_grad():
                    y_preds = net(images)
                avg_preds.append(y_preds.softmax(1).to('cpu').numpy())
        avg_preds = np.mean(avg_preds, axis=0)
        probs.append(avg_preds)
    probs = np.concatenate(probs)
    return probs

今回はTTAは軽くても良さそうな雰囲気でFlipのみで済みましたが、もう少し色々やったほうがいい場合は対応できないので結局TransformsでのTTAは勉強する必要が有る気がします。

TPUでの学習

公開ノートがあったためkaggleのTPUリソースを活用できました。efficientnet-b4において、GPUだとimagesize384、batchsize16のところ、TPUだとimagesize512、batchsize64で学習できます。

nprocsが1のときと1より多いときでは並列に学習していくため少し処理が変わってきます。自分は8にしたらうまく動かなかったためコンペ期間中は1で過ごしていました。

LINE通知

コピペで使える。Kaggleでの実験を効率化する小技まとめで紹介されているLINEに通知を導入しました。限られたリソースが無駄にならないようにepoch毎にスコアを通知していました。まだまだ自分のコードに自身が持てないので、学習が思った感じに進んでない場合など事故が起きた場合すぐに気づいて止めることができます。何回か助けられました。これからkaggleを始める人にはぜひおすすめしたい取り組み方です。

f:id:teyoblog:20210221200651p:plain
学習が思ってない感じで進んでる図

おわりに

以上になります。自分のコンペ中のコードやメモからピックしましたが、もう少しあとから活用できるようなメモをつけれるようになりたいと感じました。

【Kaggle挑戦記】Cassavaコンペ振り返り(本編)【#6】

f:id:teyoblog:20210220203443p:plain:w500

こんにちは

今回は「Cassava Leaf Disease Classification」というコンペに挑戦しました。

Cassava Leaf Disease Classification

結果はpublic891位からshake downしてprivate1303位という大惨敗です。

まず、どんな目標を立てて取り組んでどうなっかに軽く触れて、コンペへの取組内容と敗北者ソリューションを載せます。それではよろしくおねがいします。

このコンペでの目標

本コンペは運要素が強いと言われていましたが、やることはシンプルな画像分類で評価値も正解率だったためとっつきやすいです。なので、画像タスクの基本的な部分を学ぶということで下記目標を設定して挑戦しました。

  • MLOpsを小さく始める
  • Data Augmentationについて理解を深める
  • Psuedo-labelingの実装
  • TTAの実装
  • 銀メダル以上
  • ViTを使ってみる

ここでは達成度を完結に書いて、後日余裕があったらそれぞれアウトプットします。

  • Hydra
    • 導入した
  • MLflow Tracking
    • 導入した。保存先がD直下からうまくいじれずにもうここで良いやってなった
  • Data Augmentation
    • 自分で試行錯誤するところまで行かなかったが雰囲気をつかめた
  • Psuedo-labeling
    • 余裕がなく使いませんでした。
  • TTAの実装
    • TTachを使った
  • 銀メダル以上
  • ViT
    • VitではないがDeitを使った学習はした。

コンペの概要

コンペのタイトルを読んで字の如くキャッサバの病気を分類する画像タスクです。

背景

  • キャッサバはアフリカ第2の炭水化物供給源
  • 過酷な条件でも育てることが可能なため零細農家の収入源
  • サハラ以南のアフリカでは少なくとも8割の家庭よう農場で作られている
  • ウイルス性の病気が収穫不良の主な原因となる
  • 現在は政府が出資する専門家の協力のもと目視でどんな病気にかかっているかを調べている
    • コストがかかる

キャッサバの病気を安価に特定し、適切な対処をすることで収穫不良を防ぐことは重要なことのようです。

データについて

  • 21367枚のラベル付き画像データ
  • 病気は4種類と健康な状態を加えた5カテゴリ
  • アノテーションミスが多いらしい1
  • image size H:600,W:800
    • 事前に揃えてくれていたみたいですがたまにアスペクト比のおかしいものも混ざってました。
  • label
    • 0: "Cassava Bacterial Blight (CBB)",斑点細菌病
    • 1: "Cassava Brown Streak Disease (CBSD)",キャッサバ褐色条斑病
    • 2: "Cassava Green Mottle (CGM)",キャッサバ緑斑紋ウイルス
    • 3: "Cassava Mosaic Disease (CMD)",モザイク病
    • 4: "Healthy"
  • trainとtestの比率はだいたい一緒
label 割合 public
0 1087 5% 4.8%
1 2189 10% 10.6%
2 2386 11% 10.3%
3 13158 61% 60.2%
4 2577 12% 14.1%
21397 - -

評価値

評価値はAccuracyなので何枚正解したかで決まります。内訳は下記のようになっています。

  • テストデータ 約15000枚
    • public約4650枚
    • private約10350枚

Leaderbordを見るとかなり団子になっていて、publicは5枚多く正解すると0.001上がってかなり順位が動きます。

取組内容

それでは取組内容に入ります。これまでに述べたように、本コンペはtrainもtestもノイジーなコンペと言われていました。

芋の画像がたくさん有る件

まず実際に画像を見てみると芋の画像がたくさんありました。う○こ画像と自分は呼んでたのですが、まずはこのう○こ画像を学習データから取り除いてみました。

f:id:teyoblog:20210220204104j:plain:w300
芋の画像1
f:id:teyoblog:20210220204234j:plain:w300
芋の画像2

結果、スコアは悪化しました。う○こ画像達のラベルを見てみるとほとんどが1にラベリングされているので、う○こは1であると学習することができ、テストデータにも同様なデータが含まれているのではないかと推測しました。

アノテーションミスデータへの対応

lossfunction

ラベルノイズにうまく対応するための Loss function の候補がいくつか議論されていたのがこのコンペの特徴ではないかと思います。実装については公開ノートとして公開2されていました。私は実際に全部試してみてTaylor Cross Entropy Loss with LabelSmoothingを採用しました。

trainデータの加工

アノテーションミスが多いことに対して私の方針は、正しくアノテーションされているデータをできるだけ高い精度で予測することでした。
(ミスってるものの正確な推測はあきらめる)

下記2つのソリューションを参考にしました。参考にしておいて散々たる結果になって申し訳ございません。

1.間違っていそうなデータは学習に使わない

全テストデータを複数のモデルで学習したあと、その全モデルからの予測値が著しく悪いものをnoiseデータ、それ以外をcleanデータと分割しました。実際に848枚をnoiseデータにしました。
f:id:teyoblog:20210220205002p:plain
※誤って正しいアノテーションをされているデータを間引いても大きな問題はないと判断しました

単体の結果では目立った精度向上は見られなかったのですが、最終的にCVの高いアンサンブルには使用されました。

noiseデータを加えてfinetuningしてみた

cleanなデータで学習してからnoisyなデータを含めてfine tuningしてみましたが、最初から全データで学習するよりも悪い結果になりました。

2.明らかに間違っているものはラベルを付け替える

1のアプローチに似ていますが、全モデルが同じ間違いをしているデータにはアノテーションし直しなおしたalangelabelを作成しました。上より慎重に、条件厳しめなので400データほどアレンジしました。

少しだけ精度の向上が見られましたがLBが良くなることもなく、有効なアプローチとは言えませんでした。

※1ではノイズデータの予測も行ってCV計算。2ではoriginal labelを使ってCVを計算しました。

以上2つのアプローチに加えて、画像サイズ、scheduler、epoch数等のハイパーパラメータを調節、複数のmodelアーキテクチャで学習をすることで精一杯でした。あとはoofを使ってアンサンブルしてCVが良いものをsubして、新しいアーキテクチャを試す流れを繰り返しました。

その他

  • image size
    • 512だと学習時間が長さにみあった精度向上がなかったことから、基本的に384を使いました。
  • scheduler
    • CosineAnnealingLR
    • GradualWarmupSchedulerV2
  • epoch数
    • 時間の関係で10にしたり、20にしたり、何が最適かはわかりませんでした。
  • optimizer
    • Adam
      • finetuningでSGDを試しましたが冴えない結果でした。
  • Augmentation
    • RandomResizedCrop
    • Transpose
    • HorizontalFlip
    • VerticalFlip
    • ShiftScaleRotate
  • TTA
    • HorizontalFlip
    • VerticalFlip

Solution

CVが一番高く、LBもそれなりに良いスコアが出ていたものを提出しました。蓋を開けてみると自分のサブの中でprivateは高い方とは言えないものでした・・・。
f:id:teyoblog:20210220205322p:plain
続いて、privateが手持ちで唯一銅圏に行っていたものも貼っておきます。これはCVがそこまで良くなく、LBもあえて選ぶほどいいスコアではなかったため提出しませんでした。 f:id:teyoblog:20210220205649p:plain

最後に自分のCV,LBのスコアを時系列で並べたものも置いておきます。
f:id:teyoblog:20210220205721p:plain
これを見るとガッツリアンサンブルをし始めた頃からCVだけ上がっていますね・・・。

反省

実験の手数が少なかったことに力不足を感じました。毎回resnext,effnetの2つで試すというのも非効率的だった気がします。実験して、結果を見て、何かを決定して次の実験を決める。ような進め方をすべきなんでしょうか?

実装面では、終盤にArcFaceを導入してみようと思って取り掛かりましたが、「最終そうに差し込むだけ」とあちこちに書いてあるにも関わらずうまく導入できませんでした・・・反省というよりはまだまだだなぁと悔しい思いをしました。 また、discussionでcutmix系が効かないとあったため使わなかったのですが、画像タスクに取り組むには知ってなきゃいけないものなので実装してみるべきでした。

また次がんばります。

ヨーロッパ旅行記⑥[プラハ]

はじめに

この旅行記は昔したヨーロッパ旅行の記録です。

1週間ほどかけてドイツ、チェコオーストリアを周遊しました。


できる限り自分が見たい旅行記に近づけるようにがんばって書いています。
ここが良い、これがほしいありましたらご意見待ってます。

バックナンバー

ヨーロッパ旅行記①[出発~フランクフルト]

ヨーロッパ旅行記②[フランクフルト~ローテンブルク~フュッセン]

ヨーロッパ旅行記③[ノイシュバンシュタイン城~フュッセン市街地]

ヨーロッパ旅行記④[ミュンヘン]

ヨーロッパ旅行記⑤[チェスキークロムロフ]

今回の旅程

前回はチェスキークロムロフを観光しバスでチェコに向かうところまででした。今回は引き続き4日目、プラハの夜になります。

 

チェコ到着

f:id:teyoblog:20210117171752p:plain

チェスキークロムロフからチェコまで

バスに揺られて数時間

早起きかつ疲れてたのでたくさん寝ました。

到着したバス停からホテルまで歩くには遠いのでUberを利用しました。

後にも先にも私がUberを利用したのはこれっきりだったのですが、言葉が通じなくても迎えに来てくれて目的地までちゃんと行けるものですね。ドライバーも評価命なのでウェルカムキャンディーをくれたり愛想がとても良かった記憶があります。 

 宿

宿はbookingやexpediaのようなサイトで予約は取りましたが、管理人と待ち合わせて色々説明を聞く形式でした。

ぱっと当時の記録からその宿泊施設を探しましたがそれっぽいものがなかったので立地の近い今ならここかなというようなものでも貼っておきます。

f:id:teyoblog:20210117163850j:plain

入り口

f:id:teyoblog:20210117164046j:plain

リビング

f:id:teyoblog:20210117163602j:plain

ベッドルーム①

f:id:teyoblog:20210117163623j:plain

ベッドルーム②

f:id:teyoblog:20210117163656j:plain

f:id:teyoblog:20210117164136j:plain

シャワールーム(見切れ

f:id:teyoblog:20210117163721j:plain

金ピカテーブル

殆ど寝るしかお世話にならなかったので若干もったいなかった気がしますが、そこまで高くもなかったので海外で良好な環境に宿泊することは良かったと思います。

食事

もう体力が残っていなかったので宿の目の前にあったレストランでピザを食べる。

夜の街散策

同行者はもう力尽きていたのと天候も不安定だったので一人で夜景を撮りに散歩をしました。

まずはMuseum駅からMalostranská駅に地下鉄で移動。カレル橋の向こうまで行って、枯れる橋をわたって宿まで歩いて帰ります。

f:id:teyoblog:20210117165331p:plain

地下鉄路線図(wikipediaより

f:id:teyoblog:20210117164958j:plain

地下鉄の駅

チケットの使い方はなんとか調べて・・・

f:id:teyoblog:20210117165700j:plain

小雨で石畳が濡れていい感じにリフレクションしています

f:id:teyoblog:20210117165734j:plain

海外の落書きは映える

f:id:teyoblog:20210117165837j:plain

今更ですが全然人がいないですね

f:id:teyoblog:20210117170141j:plain

プラハ城がライトアップされていい感じ

f:id:teyoblog:20210117170308j:plain

f:id:teyoblog:20210117170348j:plain

カレル橋の像

f:id:teyoblog:20210117170455j:plain

カメラ持ってると夜景取りに行きたくなってだいたい一人で散策に出ちゃうのですがあたりな風景

f:id:teyoblog:20210117170603j:plain

トラム・・・疾走感溢れてるけど別にそんなに高速で走っていないです

f:id:teyoblog:20210117170727j:plain

別の視点からプラハ

結構この視点好き

 

このあと宿に帰ったらみんな寝ていた 気がする

4日目終わり!

f:id:teyoblog:20210117171912p:plain

4日目の移動

早起きして電車とバスを駆使してチェスキークロムロフへ行き、更にバスでプラハまで行くというアグレッシブな一日を過ごしました。あまりするものでもない気がします...

 

今日はここまで、次回は5日目に入ってチェコ観光になります。

ヨーロッパ旅行記⑤[チェスキークロムロフ]

はじめに

こんにちは。

この旅行記は昔したヨーロッパ旅行の記録です。

1週間ほどかけてドイツ、チェコオーストリアを周遊しました。


できる限り自分が見たい旅行記に近づけるようにがんばって書いています。
ここが良い、これがほしいありましたらご意見待ってます。

バックナンバー

ヨーロッパ旅行記①[出発~フランクフルト]

ヨーロッパ旅行記②[フランクフルト~ローテンブルク~フュッセン]

ヨーロッパ旅行記③[ノイシュバンシュタイン城~フュッセン市街地]

ヨーロッパ旅行記④[ミュンヘン]

4日目の旅程

前回はドイツミュンヘンを観光し、ホステルで宿泊するところまででした。

今回から4日目に入ります。

電車とバスでチェスキークロムロフにいき、プラハに行きます。

まずは電車でリンツへ...

f:id:teyoblog:20210109201401p:plain

早起きしてミュンヘン駅に向かいます。

このあとの交通機関が予約済みのバスということでこの旅行の中でいちばん大切な時間厳守ポイントでしたが同行者が早起き得意マンだったためなんとかなりました。

f:id:teyoblog:20210109192752j:plain

おそらくこのリンツ経由ブダペスト行きにのりました。

f:id:teyoblog:20210109192933j:plain

 これは構内のパン屋で同行者が買った買ったサンドイッチ?

f:id:teyoblog:20210109193338j:plain

オーストラリアに入ってザルツブルクを通過~

f:id:teyoblog:20210109193125j:plain

リンツに到着。風景の写真はもうドイツで見飽きたからか朝早くだったからかなかったです。

シャトルバスでチェスキークロムロフへ

チェスキークロムロフへはシャトルバスを利用します。

まだサービスは残っていた笑

当時から比較的ちゃんとした日本語のページが有り予約はスムーズにできました。

 

ただここでバスが見つからないというこの旅最大の事件が発生しました。

 

まずはバス乗り場に向かいます。

しかし、それっぽいバスは有りません。時間もそれほど余裕はないです。

バスのりばにいた人に聞いても他のバスのりばはないとのこと 

ビーンシャトルの問い合わせ先に電話を掛けてみる。つながります。つたない英語でバスはどこで乗ればいいか聞いてみるも返事が聞き取れない(内容的にも音質的にも)会話にならないで電話は切ります。もう泣きそうです。

 

リンツ駅のインフォメーションセンターにチケットを見せてどこで乗るのか聞いてもわからないと言われておしまい。

 

もう探す場所がないです。

 

詰みを確信していたタイミングで陽気なおっちゃんに声をかけられて、そのおっちゃんがバスの運転手でした。

f:id:teyoblog:20210109194444j:plain

観光バスを想像していただけにこのワンボックスは見つけられるわけが・・・

 

もっと下調べが必要でした。

なんとかシャトルバスにも乗れたのでチェスキークロムロフへ運んでもらえます。

f:id:teyoblog:20210109195027j:plain

バスからの風景

チェスキークロムロフ

f:id:teyoblog:20210109195430j:plain

到着。見てのとおり基本石畳です。キャリーバッグの敵です。

まずは観光案内所にキャリーバッグを預けてからお昼ごはんをたべます。

観光案内所に行くまでに一人のキャリーバッグのタイヤが破損しました

昼御飯

街の外れにある「Restaurace Eggenberg」というレストランを選びました。チェコ料理です。

だいたい地図で見える範囲がチェスキークロムロフで、出発点あたりでバスに降ろされて、市内を縦断した形になります。

f:id:teyoblog:20210109200429j:plain

手前と奥は牛肉料理だった気がします

f:id:teyoblog:20210109200514j:plain

白いパンのようなものはクネドリーキ(Knedlíky)というものらしいです。(今知った

下の写真は郷土料理なので何らかの取替うさぎの肉です。記憶が曖昧ですみません。

 

牛肉は柔らかく、ソースにも変なく世話なく美味しく食べれました。クネドリーキはなんというかムチッとしててお腹にたまります。まずくはないです。

何らかの肉は骨が多くて食べるのが大変そうでした。

 観光

 街が小規模ということとずっと一緒に行動してきた気疲れ?というのも有り、全員の合意のもと集合場所、時間を決めて別々に市内観光をしました。

私は見たいものを見れればいいと言うよりは全部回りたい派なのでとりあえず全体を歩いて回る方法で市内散策です。

f:id:teyoblog:20210109202517j:plain

遠くからみた街

f:id:teyoblog:20210109202632j:plain

f:id:teyoblog:20210109202651j:plain

f:id:teyoblog:20210109202738j:plain

オブジェ?

f:id:teyoblog:20210109202813j:plain

街角

f:id:teyoblog:20210109202855j:plain

一番南のブロックからチェスキークロムロフ城を見た風景

こうしてみるとオレンジの屋根が重なり合って良いですね

f:id:teyoblog:20210109202946j:plain

f:id:teyoblog:20210109203006j:plain

結構好き

f:id:teyoblog:20210109203028j:plain

チェスキークロムロフはプラハからの日帰りが主流のようですが、贅沢に宿泊する場合もあるそうで、そういった場合はこういう場所で飲むと楽しいかも

f:id:teyoblog:20210109203201j:plain

f:id:teyoblog:20210109203234j:plain

城を見上げるスポットまで来ました

これから見えてる場所に行きます

f:id:teyoblog:20210109203337j:plain

野良犬?

f:id:teyoblog:20210109203355j:plain

テンション上がる路地の階段を登っていきます

f:id:teyoblog:20210109203432j:plain

実はさっきの野良犬が案内してくれていました

f:id:teyoblog:20210109203502j:plain

それも城の中まで

f:id:teyoblog:20210109203547j:plain

f:id:teyoblog:20210109203608j:plain

f:id:teyoblog:20210109203632j:plain

城からの風景

実は城と言ってもこれくらいで、景色を楽しむくらいでした。

次にこれまでちょくちょく写真に写っていた塔に登ります

ココでついに料金発生

f:id:teyoblog:20210109203837j:plain

これがその塔

f:id:teyoblog:20210109203918j:plain

のぼる

f:id:teyoblog:20210109203936j:plain

鐘がある

f:id:teyoblog:20210109204005j:plain

景色。

奥に黄色いバスが有るのですが、あれがこのあとプラハに行くときに乗るバスです。

f:id:teyoblog:20210109204052j:plain

城も見えます

f:id:teyoblog:20210109204112j:plain

時間になったので広場に戻ります

f:id:teyoblog:20210109204150j:plain

f:id:teyoblog:20210109204527j:plain

待ち時間に現地通貨を撮るなど

チェコへ...

f:id:teyoblog:20210109204410j:plain

チェコに向かうバスは大きかった・・・(ココに来るときもこんなの想像してた

バスについては下記サイトで紹介されてるはStudent Agencyというところだと思います。3時間位なのにかなり安かった記憶があります

traveldiary.tokyo

f:id:teyoblog:20210109205202j:plain

Wi-Fiもついてればこのようにモニターも付いています。

これからバスに揺られるということで今回はココまでにしようと思います。

チェコにつく頃にはもう日は沈み夜景になっていました。

f:id:teyoblog:20210109205400j:plain

チェスキークロムロフを振り返る

今更ですが、チェスキークロムロフって“世界一美しい街”と言われています。だからこそ今回はこことノイシュバンシュタイン城の2つは絶対に行くということを決めてプランを寢りました。観光時間については泊まるほどでないということで、欲張りにその日のうちにチェコまで行っちゃいました。

 

ここには電車で来れないのでバスで来る必要があります。一番気楽なのはチェコから往復で黄色のでかいバスが良いかなと思います。電車も有るようです。まったり電車も手段かもしれません。

今回はあまりお店を見たりは出来なかったのでもっとゆっくり見回って宿泊という選択肢は十分あると思います。

 

個人的には青空だったらもっとよかった・・・

 

それでは次回チェコ編で!