【本読んだ】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に参加してきました。
こんにちは
3/5-3/13の期間で開催されていたatmaCupという機械学習コンペに初めて参加してきました。
public119->private143(↓24)/298(サブしてる人数)と結果は振るわなかったですがとてもいい経験になりました。
コンペサイト→#10 [初心者歓迎!] atmaCup
コンペ関係者の皆様、このような機会を設けていただきありがとうございます。
入賞者の方々、おめでとうございます。
参加者の方々、お疲れさまでした!
なぜ参加したか
atmaCupについては#6の頃から認知はしていました。なぜ参加してなかったかというと、kaggleのコンペマスターを目指していたからです。
ではなぜ今回参加したのかというと、日本語で情報収集ができると思ったからです。[初心者向]と書いてあったことも大きいですが、やはり日本語で学ぶことができることは大きいです。
思ったとおりだった?
思ったとおりでした。いや、それ以上のものがありました。
なにがよかった?
下記、良かったと思うものを並べていきます。atmaCup未参加の方に魅力が一つでも伝わればと思います。
公式の初心者向け講座が神だった
初心者向け?ということで、nyker_gotoさんによる講座がありました。
今回のコンペのデータを題材にして、分析やアプローチに関する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
- ディスカッションからピックアップして見る
- タイトルの言語判定特徴
- データを見て何語かが特徴量になるのでは?という発想には脱帽です・・・
- fast textで何語かという特徴量を作成して、初心者講座のOneHotEncodingBlocksにぶち込みました。
- CV:1.0930,LB:1.0491
- sub_titleから作品のサイズを抽出して単位をmmに統一する
- 縦と横のサイズに加えて自分で面積と縦横比も作ってみました。
- CV:1.0699, LB:1.0314
- materialの取り扱い
- こちらはmaterialをOneHotEncodingまでのコードが提供されていたのでそのまま組み込みました。
- CV:1.0529, LB:1.0179
- タイトルの言語判定特徴
- 最後に少しだけチューニングとアンサンブル
- LB:1.0134
最終的に特徴量重要度は下記のようになりました。
BERTや他のディスカッションを読み切る時間はありませんでした。
これまでkaggleで1週間でサブで来たことがなかったので、1週間という期間の中でサブして、少し実験してというのはいい経験になったと思います。もっと強くなってまた戦いに来たいです。
終わりに
またtwitter等で募集をするのですが、 GWを期間に含むkaggleコンペにチームで参加したいです。仲間に入れてくれる方、興味が有る方からの連絡待っています。
分析コンペ勉強会で勉強してきた。 #33dsoc
※ほぼ日記です。
こんにちは、面白そうな勉強会があったので聴講してきました。1
何れの発表も発表者様の考えがうまく言語化されていてとても勉強になると同時に、考えを言語化する力の凄さを感じました。
具体的には下記のような能力についてでしょうか。考えて、試して、振り返って、力にすることの大切さを改めて学ぶことが出来ました。
- 課題の中にある課題を理解し、分解し、置換して事例を探したり解決する力
- 自分とトッププレイヤーの力の差をうまく測ること
- コンペとして(機械学習で解決する対象として)適切かどうか審判する力
- 多用なリソースを使いこなる力
- ノイズに立ち向かう力
- より効果的にコンペのスコアを上げる力
メモ
下記に書く発表中に取ったメモというか感想を乗っけときます。なかなか伝わらないと思うので資料を確認出来次第リンクをはろうと思います。
■脱! Deepでポン🎶ハイパラチューニング芸人を卒業するために
- 資料
- 課題を理解・分解・置換する
- コンペの難しい部分を理解する
- 課題の調べ方も工夫すると良い
- 難しいポイント(ノイズや、CV,LB相関)はディスカッションでわかることも多い印象なので、そこから自分なりに分解してどうするかまで考えることでやることが見えてくるのかなと感じた
■atmaCup#6 を開催したときの体制や流れについて
- コンペを開催することで得られるもの
- トッププレイヤーのソリューション
- EDA等の知見
- 自前でやることと比較してレベルの差等の情報収集
- もちろん人事、法務のちからもあってコンペの準備をしていく
- お互い(課題提供側とプラットフォーム側で)解いてみて精度の差を確認
- 大きいと見落としポイントがあるかも?
- shakeやleakの確認
■Colaboratoryで分析コンペをする時のテクニック集
■Noisy label 対抗記 ~Cassava Leaf Disease Classification~
- noisy label に立ち向かう
- アンサンブルで対抗
- lossで対抗
- バッチノーマライゼーションを前半は固定
- confident learning
- clean lab
■atmaCupなど短期間コンペのススメと戦い方について
Cassavaコンペ中に学んだことや自分用メモ
こんにちは
今回はCassavaコンペ期間中に導入したことや、自分用のメモを書きます。
HydraとMLflow Trackingの導入
下記サイトにお世話になりました。
- 公式ドキュメント
- 小さく始めて大きく育てるMLOps2020
- ハイパラ管理のすすめ -ハイパーパラメータをHydra+MLflowで管理しよう-
- Hydraで始めるハイパラ管理
- Python: 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
run nameも最悪あとから Rename 出来ます。
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の部分)
# 最終層の差し替え(キャッサバコンペは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
とカッコを忘れてしまって学習し直しになったりしました・・・。
- statedict()
# セーブ torch.save(model.state_dict(), PATH) # ロード model = TheModelClass(*args, **kwargs) model.load_state_dict(torch.load(PATH)) model.eval()
- モデル全体
# セーブ torch.save(model, PATH) # ロード model = torch.load(PATH) model.eval()
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を始める人にはぜひおすすめしたい取り組み方です。
おわりに
以上になります。自分のコンペ中のコードやメモからピックしましたが、もう少しあとから活用できるようなメモをつけれるようになりたいと感じました。
【Kaggle挑戦記】Cassavaコンペ振り返り(本編)【#6】
こんにちは
今回は「Cassava Leaf Disease Classification」というコンペに挑戦しました。
Cassava Leaf Disease Classification
結果はpublic891位からshake downしてprivate1303位という大惨敗です。
まず、どんな目標を立てて取り組んでどうなっかに軽く触れて、コンペへの取組内容と敗北者ソリューションを載せます。それではよろしくおねがいします。
このコンペでの目標
本コンペは運要素が強いと言われていましたが、やることはシンプルな画像分類で評価値も正解率だったためとっつきやすいです。なので、画像タスクの基本的な部分を学ぶということで下記目標を設定して挑戦しました。
- MLOpsを小さく始める
- Hydra
- MLflow Tracking
- (Optuna)
- (Kedro)
- 参考リンク
- 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
- 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もノイジーなコンペと言われていました。
芋の画像がたくさん有る件
まず実際に画像を見てみると芋の画像がたくさんありました。う○こ画像と自分は呼んでたのですが、まずはこのう○こ画像を学習データから取り除いてみました。
結果、スコアは悪化しました。う○こ画像達のラベルを見てみるとほとんどが1にラベリングされているので、う○こは1であると学習することができ、テストデータにも同様なデータが含まれているのではないかと推測しました。
アノテーションミスデータへの対応
lossfunction
ラベルノイズにうまく対応するための Loss function の候補がいくつか議論されていたのがこのコンペの特徴ではないかと思います。実装については公開ノートとして公開2されていました。私は実際に全部試してみてTaylor Cross Entropy Loss with LabelSmoothing
を採用しました。
trainデータの加工
アノテーションミスが多いことに対して私の方針は、正しくアノテーションされているデータをできるだけ高い精度で予測することでした。
(ミスってるものの正確な推測はあきらめる)
下記2つのソリューションを参考にしました。参考にしておいて散々たる結果になって申し訳ございません。
1.間違っていそうなデータは学習に使わない
全テストデータを複数のモデルで学習したあと、その全モデルからの予測値が著しく悪いものをnoiseデータ、それ以外をcleanデータと分割しました。実際に848枚をnoiseデータにしました。
※誤って正しいアノテーションをされているデータを間引いても大きな問題はないと判断しました
単体の結果では目立った精度向上は見られなかったのですが、最終的に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を試しましたが冴えない結果でした。
- Adam
- Augmentation
- RandomResizedCrop
- Transpose
- HorizontalFlip
- VerticalFlip
- ShiftScaleRotate
- TTA
- HorizontalFlip
- VerticalFlip
Solution
CVが一番高く、LBもそれなりに良いスコアが出ていたものを提出しました。蓋を開けてみると自分のサブの中でprivateは高い方とは言えないものでした・・・。
続いて、privateが手持ちで唯一銅圏に行っていたものも貼っておきます。これはCVがそこまで良くなく、LBもあえて選ぶほどいいスコアではなかったため提出しませんでした。
最後に自分のCV,LBのスコアを時系列で並べたものも置いておきます。
これを見るとガッツリアンサンブルをし始めた頃からCVだけ上がっていますね・・・。
反省
実験の手数が少なかったことに力不足を感じました。毎回resnext,effnetの2つで試すというのも非効率的だった気がします。実験して、結果を見て、何かを決定して次の実験を決める。ような進め方をすべきなんでしょうか?
実装面では、終盤にArcFaceを導入してみようと思って取り掛かりましたが、「最終そうに差し込むだけ」とあちこちに書いてあるにも関わらずうまく導入できませんでした・・・反省というよりはまだまだだなぁと悔しい思いをしました。 また、discussionでcutmix系が効かないとあったため使わなかったのですが、画像タスクに取り組むには知ってなきゃいけないものなので実装してみるべきでした。
また次がんばります。
ヨーロッパ旅行記⑥[プラハ]
はじめに
この旅行記は昔したヨーロッパ旅行の記録です。
1週間ほどかけてドイツ、チェコ、オーストリアを周遊しました。
できる限り自分が見たい旅行記に近づけるようにがんばって書いています。
ここが良い、これがほしいありましたらご意見待ってます。
バックナンバー
ヨーロッパ旅行記②[フランクフルト~ローテンブルク~フュッセン]
ヨーロッパ旅行記③[ノイシュバンシュタイン城~フュッセン市街地]
今回の旅程
前回はチェスキークロムロフを観光しバスでチェコに向かうところまででした。今回は引き続き4日目、プラハの夜になります。
チェコ到着
バスに揺られて数時間
早起きかつ疲れてたのでたくさん寝ました。
到着したバス停からホテルまで歩くには遠いのでUberを利用しました。
後にも先にも私がUberを利用したのはこれっきりだったのですが、言葉が通じなくても迎えに来てくれて目的地までちゃんと行けるものですね。ドライバーも評価命なのでウェルカムキャンディーをくれたり愛想がとても良かった記憶があります。
宿
宿はbookingやexpediaのようなサイトで予約は取りましたが、管理人と待ち合わせて色々説明を聞く形式でした。
ぱっと当時の記録からその宿泊施設を探しましたがそれっぽいものがなかったので立地の近い今ならここかなというようなものでも貼っておきます。
入り口
リビング
ベッドルーム①
ベッドルーム②
シャワールーム(見切れ
金ピカテーブル
殆ど寝るしかお世話にならなかったので若干もったいなかった気がしますが、そこまで高くもなかったので海外で良好な環境に宿泊することは良かったと思います。
食事
もう体力が残っていなかったので宿の目の前にあったレストランでピザを食べる。
夜の街散策
同行者はもう力尽きていたのと天候も不安定だったので一人で夜景を撮りに散歩をしました。
まずはMuseum駅からMalostranská駅に地下鉄で移動。カレル橋の向こうまで行って、枯れる橋をわたって宿まで歩いて帰ります。
地下鉄の駅
チケットの使い方はなんとか調べて・・・
小雨で石畳が濡れていい感じにリフレクションしています
海外の落書きは映える
今更ですが全然人がいないですね
プラハ城がライトアップされていい感じ
カレル橋の像
カメラ持ってると夜景取りに行きたくなってだいたい一人で散策に出ちゃうのですがあたりな風景
トラム・・・疾走感溢れてるけど別にそんなに高速で走っていないです
別の視点からプラハ城
結構この視点好き
このあと宿に帰ったらみんな寝ていた 気がする
4日目終わり!
早起きして電車とバスを駆使してチェスキークロムロフへ行き、更にバスでプラハまで行くというアグレッシブな一日を過ごしました。あまりするものでもない気がします...
今日はここまで、次回は5日目に入ってチェコ観光になります。
ヨーロッパ旅行記⑤[チェスキークロムロフ]
はじめに
こんにちは。
この旅行記は昔したヨーロッパ旅行の記録です。
1週間ほどかけてドイツ、チェコ、オーストリアを周遊しました。
できる限り自分が見たい旅行記に近づけるようにがんばって書いています。
ここが良い、これがほしいありましたらご意見待ってます。
バックナンバー
ヨーロッパ旅行記②[フランクフルト~ローテンブルク~フュッセン]
ヨーロッパ旅行記③[ノイシュバンシュタイン城~フュッセン市街地]
4日目の旅程
前回はドイツミュンヘンを観光し、ホステルで宿泊するところまででした。
今回から4日目に入ります。
電車とバスでチェスキークロムロフにいき、プラハに行きます。
まずは電車でリンツへ...
早起きしてミュンヘン駅に向かいます。
このあとの交通機関が予約済みのバスということでこの旅行の中でいちばん大切な時間厳守ポイントでしたが同行者が早起き得意マンだったためなんとかなりました。
これは構内のパン屋で同行者が買った買ったサンドイッチ?
オーストラリアに入ってザルツブルクを通過~
リンツに到着。風景の写真はもうドイツで見飽きたからか朝早くだったからかなかったです。
シャトルバスでチェスキークロムロフへ
チェスキークロムロフへはシャトルバスを利用します。
まだサービスは残っていた笑
当時から比較的ちゃんとした日本語のページが有り予約はスムーズにできました。
ただここでバスが見つからないというこの旅最大の事件が発生しました。
まずはバス乗り場に向かいます。
しかし、それっぽいバスは有りません。時間もそれほど余裕はないです。
バスのりばにいた人に聞いても他のバスのりばはないとのこと
ビーンシャトルの問い合わせ先に電話を掛けてみる。つながります。つたない英語でバスはどこで乗ればいいか聞いてみるも返事が聞き取れない(内容的にも音質的にも)会話にならないで電話は切ります。もう泣きそうです。
リンツ駅のインフォメーションセンターにチケットを見せてどこで乗るのか聞いてもわからないと言われておしまい。
もう探す場所がないです。
詰みを確信していたタイミングで陽気なおっちゃんに声をかけられて、そのおっちゃんがバスの運転手でした。
観光バスを想像していただけにこのワンボックスは見つけられるわけが・・・
もっと下調べが必要でした。
なんとかシャトルバスにも乗れたのでチェスキークロムロフへ運んでもらえます。
バスからの風景
チェスキークロムロフ
到着。見てのとおり基本石畳です。キャリーバッグの敵です。
まずは観光案内所にキャリーバッグを預けてからお昼ごはんをたべます。
観光案内所に行くまでに一人のキャリーバッグのタイヤが破損しました
昼御飯
街の外れにある「Restaurace Eggenberg」というレストランを選びました。チェコ料理です。
だいたい地図で見える範囲がチェスキークロムロフで、出発点あたりでバスに降ろされて、市内を縦断した形になります。
手前と奥は牛肉料理だった気がします
白いパンのようなものはクネドリーキ(Knedlíky)というものらしいです。(今知った
下の写真は郷土料理なので何らかの取替うさぎの肉です。記憶が曖昧ですみません。
牛肉は柔らかく、ソースにも変なく世話なく美味しく食べれました。クネドリーキはなんというかムチッとしててお腹にたまります。まずくはないです。
何らかの肉は骨が多くて食べるのが大変そうでした。
観光
街が小規模ということとずっと一緒に行動してきた気疲れ?というのも有り、全員の合意のもと集合場所、時間を決めて別々に市内観光をしました。
私は見たいものを見れればいいと言うよりは全部回りたい派なのでとりあえず全体を歩いて回る方法で市内散策です。
遠くからみた街
オブジェ?
街角
一番南のブロックからチェスキークロムロフ城を見た風景
こうしてみるとオレンジの屋根が重なり合って良いですね
結構好き
チェスキークロムロフはプラハからの日帰りが主流のようですが、贅沢に宿泊する場合もあるそうで、そういった場合はこういう場所で飲むと楽しいかも
城を見上げるスポットまで来ました
これから見えてる場所に行きます
野良犬?
テンション上がる路地の階段を登っていきます
実はさっきの野良犬が案内してくれていました
それも城の中まで
城からの風景
実は城と言ってもこれくらいで、景色を楽しむくらいでした。
次にこれまでちょくちょく写真に写っていた塔に登ります
ココでついに料金発生
これがその塔
のぼる
鐘がある
景色。
奥に黄色いバスが有るのですが、あれがこのあとプラハに行くときに乗るバスです。
城も見えます
時間になったので広場に戻ります
待ち時間に現地通貨を撮るなど
チェコへ...
チェコに向かうバスは大きかった・・・(ココに来るときもこんなの想像してた
バスについては下記サイトで紹介されてるはStudent Agencyというところだと思います。3時間位なのにかなり安かった記憶があります
Wi-Fiもついてればこのようにモニターも付いています。
これからバスに揺られるということで今回はココまでにしようと思います。
チェコにつく頃にはもう日は沈み夜景になっていました。
チェスキークロムロフを振り返る
今更ですが、チェスキークロムロフって“世界一美しい街”と言われています。だからこそ今回はこことノイシュバンシュタイン城の2つは絶対に行くということを決めてプランを寢りました。観光時間については泊まるほどでないということで、欲張りにその日のうちにチェコまで行っちゃいました。
ここには電車で来れないのでバスで来る必要があります。一番気楽なのはチェコから往復で黄色のでかいバスが良いかなと思います。電車も有るようです。まったり電車も手段かもしれません。
今回はあまりお店を見たりは出来なかったのでもっとゆっくり見回って宿泊という選択肢は十分あると思います。
個人的には青空だったらもっとよかった・・・
それでは次回チェコ編で!