Augmentationの「なぜ?」に注目しながら、エラー分析をしてCIFAR-10の精度向上を目指します。Augmentとほぼ同じ(-0.1%)精度を出すことができました。直近との差分Augmentation効果が高かったもの低かったものコードまとめ動機カーネルを見ていると「何でこのAugmentation操作入れるの?」というのがよくあって、それが謎の高い精度を出してたりすることが稀によくあります。Augmentを使えばいい感じにはなるのだけど、「なぜ?」の部分が結局解決しないままで、モヤモヤ感がすごかったのです。そこで、訓練と同時にエラー分析を行い、「どのへんがどの程度間違っているの?」ということを明らかにしながら精度向上を行っていきます。データはCIFAR-10を使います。ぶっちゃけCIFAR-10ならAutoAugment用の最適化済みポリシーが既にあってそれを使えば、お手軽に精度を出せるのですが、それだと脳死になっちゃって趣旨に反するので、今回は手動でやります。ResNet28-10でエラー率2.6±0.1%という公式記録があります。今回やった手動のAugmentationでは同一のネットワークのほとんど同じ設定で、それに近い精度(エラー率2.7%)というのを達成することができました。コードは末尾にあります。Augmentationしない設定です。なしオプティマイザーはMomentumで係数は0.9です。このオプティマイザーの設定はケースを通じて変更しません。その他の設定は途中で変更します。試行回数はすべて1回なので精度に誤差があるかもしれません。PoolingしてSoftmaxが1層という構成です。詳しくは末尾のコードを見てください。Augmentationなしでの精度(テスト精度)は88.95%とりました。テストデータ1万個に対する混同行列は次の通りです。Augmentationを入れます。Augmenationを入れます。以下のコードでできます。batch_size=batch_size)さすがに定番だけあって非常によく効いて、88.95%から大幅に改善し、93.18%となりました。混同行列は以下の通りです。多いのが、犬と猫の間違いですね。これはラスボスクラスに強くてどんなにAugmentationしてもなかなか改善されません。Dogsのようなデータセットをプラスで入れれば大きく改善されるのでしょうが、それだともうCIFAR-10ではなくなってしまうので。エラー分析で個々の間違いを見ていきましょう。ベースラインの間違いが多かった上位5件を見てみます。この表のTrueというのは真のラベルで、Predというのは予測ラベルです。rankはそのエラー分析の中での該当個数が多い順のランキングです。この例なら、「本当は犬の画像なんだけど、猫と予測されていて、そのサンプル数が68個あり、エラーの順位としてはワースト1」という意味です。この個数は混同行列の表と対応します。「本当は猫だけど、犬と予測されている」ケースも多いです。なんかぱっと見ると色が原因のような感じはしますね。白と黒のしましま模様のは、猫でも犬でもあってそれが紛らわしいような印象は受けます。3つ目はぐっと件数は減りますが、「本当は猫だけど、鹿と予測されているケース」です。これはわかりやすいですね。草原の背景に黄色い猫は確かに鹿っぽく見える。色が原因ではないかと思われます。4つ目は「本当は船だけど飛行機と予測されているケース」。これもわかりやすくて、空と湖水・海を勘違いしているケース。色が原因ではないかと思われます。5つめは「本当は鳥だけど、カエルと予測されているケース」。緑色というのはカエルの重要な特徴ですから、オウムのような緑色の鳥や、草原のような緑色の背景は勘違いさせやすいのでしょう。これもわかりやすいです。エラー分析を見てみると、「なんか大きな原因に色が関係してそうだよね」というのがわかります。同時に「色だけじゃなくてもっと物体の形状を見てほしいよね」というのがわかります。対策としては2つ考えられます。Range)この2つのAugmentationが”データのお気持ち”を汲み取った結果ということになります。これらを順にやっていきましょう。Zoomを加えるベースラインから太字にしたところが変更点です。RandomZoom(75%-125%)このようなジェネレーターになります。batch_size=batch_size)ズームレンジは75%~125%にしました。他の試行錯誤の例は後述。この結果、精度は93.36%に改善しました(0.18%の改善)。効果としては相当地味ですが、犬猫の間違いだけは68件→56件とかなり改善していることがわかります。人間的には犬猫の間違いは注意深くズームすればわかるかなという感じなので、ズームを入れてより形状に注目するようにすれば、若干効果はあるのかもしれません。これを見てもやはり色の問題は残っているようで、やはり一度は色のAugmentationを入れたほうがいいことがわかります。没になったケースズーム関係で没になったケースです。Zoomを入れるケース。犬猫のクラスに100%~150%のズームを入れる→92.34%犬猫のクラスに100%~125%のズームを入れる→92.84%精度が大きく下がってしまいました。犬猫のクラスのみではなく、全てのクラスにズームを入れると次のような精度になりました。すべてのクラスの100~150%のズームを入れる→92.53%すべてのクラスに100~125%のズームを入れる→93.12%いずれの2つのケースでも、犬猫のクラスのみズームするという、局所的なクラスのAugmentationはパフォーマンスを悪化させるというのがわかりました。今回のケースでは局所的なAugmentationはそそくさと切り捨ててしまいました。いうのが効果があるという研究があったらぜひ教えてください。この中で75%~125%のケースのみが93.36%とベースラインからの唯一の改善例となりました。今振り返ると、上記の4例ではズームの平均値が100%ではないので、分布のミスマッチ起こして結果精度が悪くなったのかもしれません。試しに色調反転やったらどうなのか試してみました。白黒の犬や猫に効くのではないかと思ったからです。計算は50%の確率で「1.0-ピクセル値」すればいいだけです。結果は良くなかったので没にしました。91.74%ベースラインが93.18%だったことを踏まえると、大幅に悪化しているのがわかります。色調反転は除外してもよさそうです。Shiftを入れる次に色調のAugmentationを入れます。batch_size=batch_size)精度は93.64%(0.28%改善)となりました。Augmentationのように数%の改善というのはなくて、もはや0.数%単位の改善の世界になります。犬猫のような大きなミスに集中的に効くというよりかは、小さいミスに全般的に効くという感じですね。「本当は犬で予測は猫」の間違いは73件と増えてしまいましたが、その半面「本当は猫で予測は犬」のケースが46件と少ないので均して見ればイーブン~微減ではないかと思います。ここらへんは乱数の気分で変わるのでどっちでもいいかと思います。あとで混同行列の推移をまとめてみましょう。ここまでズームと色という2つのAugmentationを加えてみましたが、次に何をしましょう。この例を見てわかるのは、犬か猫かということではなく、ポーズだけを見て犬/猫を割り振っている可能性があるということです。本当は犬で予測が猫のケースでは、なんとなく猫がやりそうなポーズの犬であるが多いですよね。CNNはぼやっとした全体像に注目することが多いですが、CIFARでは特に解像度が32×32と低いので、人間のように細かな輪郭までなかなか見てくれないと思います。エラー分析を見ると、人間が見たところで、犬か猫かよくわからないケースもあるので。本当かどうかはわかりませんが、次に「ポーズが原因」と仮説を立てることにしましょう。ポーズに効くのかはなにかというと、回転やシアーといったアフィン変換系です。寝っ転がっている絵があっても回転させてしまえば全く別のポーズに見えますからね。どちらも試してみましょう。Shiftで没になったケースです。Rangeの値をいじってみました。93.55%shift=50が93.62%と最も高かったのでこの値を採用しました。次にランダムの回転を追加します。回転量はごく少数で±10°としました。Shift(50)回転(10°)ジェネレーターもこんな感じで足してるだけですね。batch_size=batch_size)精度は0.32%改善し、93.94%となりました。犬猫のミスは相変わらずという感じだけど、その他の細かいミスは減っているような印象を受けます。見てあまり変わってはいなそうだけど、確かに精度は徐々に上がっている状態。本当に効いてるの?という疑問が払拭できないので、ベースラインとモード3(回転まで)の混同行列を比較してみます。犬猫対策で入れたAugmentationが、実は犬猫にはあまり効いていなくて他のクラスに対して効果が高いというのがわかりました。猫は848→852で0.8%の改善、犬は880→884で0.4%の改善で実は全体の平均よりも低いのです。それより効果が高いのは、鳥が897→917で2%の改善、カエルが945→980で3.5%の改善とトップ2でした。これまでのマニュアルなAugmentationは鳥とカエルの2クラスが押し上げています。精度は上がっているので結果オーライとしましょう。没になったケース回転の角度による派生です。93.75%4ケース中で10°が最も良かったのでこれを採用しました。回転からシアーを追加したケースです。シアーはImagDataGeneratorのshear_rangeの値をいじりました。3ケース試してみたのですが、全てのケースで精度が下がってしまったので今回は使いませんでした。93.65%試行回数増やせばもうちょっと効果出るかもしれないけど、多分シアーはほとんど効かないのでしょう。これはあくまで「CIFAR-10にシアーの効果は薄いよ」という意味であって、画像データ一般にシアーのAugmentationが意味ないというわけではありません。シアーが効くようなケースもあるので、選択肢の一つとして持っておくといいと思います。シアーと回転は見た目が似ているので、ズームや平行移動、回転といったアフィン変換によるAugmentationで、もしかしたらシアーに似たような操作も再現できてしまったのかもしれませんね。次は何を追加しましょうか。犬猫の誤分類をどうにかしないといけません。ErasingみたいなAugmentationを使って、画像をランダムに消して注目する部位を平均化してみたらどうだろう?と思うのです。犬猫だと模様や耳といったわかりやすいパーツがあるので、そこに注目しやすいのではないかと思うのです。わかりやすいパーツが偶然消えてくれれば、他のパーツから判断してくれるようになって、精度が上がってくれたらいいなぁと思うのです。Erasingを追加します。ErasingはImageDataGeneratorに組み込まれていないので、自分で定義します。論文通りだと削除する面積が多すぎて正則化が強すぎるので、消す面積を控えめにします。s_h」といった消す面積比のパラメーターを調整します。Erasingのコードは次の通りです。rのパラメーターは割といい加減かも。out_image結果は精度が94.14%(0.2%)の改善となりました。精度上は改善しています。犬猫がほとんど下がりませんね。気持ち間違いの件数は減りつつあるものの、ポーズや色といった傾向もなく、正直お手上げ感が強いです。Erasing意味ないかというと、そうではなくて、実は犬の精度向上にかなり寄与しているのです。混同行列を直前のケース3(回転まで)と比較しみましょう。これまで犬のクラスはなかなか精度が上がらなかったのですが、正解の件数が884→896と1.2%も改善しているのです。Erasingは生き物に対してよく効く結果となっています。Erasingによって消されて、より広範囲を見るようになるからだと思われます。Erasingはあまりよくない結果となっています。飛行機やトラックに耳も尻尾もないので、これらのような形が単純なものには向いていないのかもしれません。ここらへんが生物のゲインを人工物が打ち消しているので、0.2%という地味な改善結果となりました。Decayを使う最後のパターンなので、テスト精度の推移の学習曲線を書いておきます。こんな感じで、学習率減衰なしでも92%あたりまで行きますが、一回目の学習率減衰が大きく効いてこれが2%ぐらい精度を押し上げます(70エポック)。二回目の減衰は仕上げで、効きは弱いですが若干押し上げる程度です(125エポック)。これ書いてる途中で気づいたけど、バグで2回目の減衰実は効いていなかった(ifを間違ってelifにした)。大きな違いないし別にいいよね。犬猫どうしよ?ということなのですが、特定の理由があるのではなく、犬猫の決定境界が怪しい感じかと思われるので、Mixupみたいなソフトなラベルを使うのが良いのではないか仮説を立てました。そこで次はMixupを使います。Erasingのパラメーター調整です。ケース3の精度が93.94%です。shが高すぎると逆に精度が下がってしまうので低めの設定としました。Augmentationを使います。これは今までと同じ方式で最適化してもあまりうまくいかなく(最適化があからさまに遅くなる)、訓練時間を長くしないと本来の性能は出ませんでした。具体的な値は没ケースで。Shake-Shakeみたいに千エポックもやる必要はありませんが(たかがこんなブログ記事で1500エポックも回すのは馬鹿げてるし、CIFAR訓練するだけで1日かかるのはやりたくない)、それに近いような発想は必要になります。Annealingに変えます。DecayのアイディアはSGDRの論文からですね。SGDRの学習率の再スタートは使いません。AnnealingはShake-Shakeの最適化でも使われているので、Shake-Shakeのお手軽版という位置づけでしょうか。Erasing(5%-20%)Mixup(beta=0.5)今回だけ3項目変更しました。Annealing(Decay)を使います。そのため訓練時間が2倍以上になります。$$という関数で表されます。$\eta$は学習率の上限と下限ですね。SGDRの再起動をしない場合は、$T_{max}$は最大エポック数(300)、$T_{cur}$は現在のエポック数を突っ込めば終わりです。1/2*(lr_max-lr_min)*(1+np.cos(epoch/T_max*np.pi))あとはこの関数をLearningRateSchedulerでラップして、StepDecay同様にCallbackに放り込めばOKですね。ジェネレーターのほうは次のようになります。0.5)結果は94.51%(0.37%の改善)となりました。マニュアルで追加したケースではかなり大きかったのではないでしょうか。混同行列は足を引っ張っていた犬猫がようやく9割の大台に達しそうです。エラー分析を見るとあまり進歩しているのがわかりづらいのですが、犬と猫の間違いが合計110~120件ぐらいあったのが、108件まで落ちています。今回は「本当が犬で予測が猫」のほうに間違いが集中していますが、これならもう間違えても仕方ないやみたいなケースのような感じはします。猫はMixupの追加で852→882と3%も改善していますね。Erasingの効きのほうが強かったのですが、回転までと比較して1.4%の改善。Erasingでは飛行機やトラックといった人工物の精度が悪くなっていましたが、Mixupを追加するとそこのマイナスが多少打ち消されるようです。Annealingでの学習曲線は次のようになります。Annealingちゃんと使うの初めてでしたが、これは結構良さそうです。実装も面倒ではないし、ステップの調整や指数の調整いらずにコサインカーブで脳死どーんなので、長めの訓練するときは使えるのではないでしょうか。Augmentのアイディアをパクってきました。Augmentationのようなアフィン変換操作に限定されないの面白いところです。Contrastのようなカラーヒストグラムをいじる操作、画像のシャープ化など、フォトレタッチソフトのようなことまで増強に含んでいるんですよね。Augmentationを拡張してみましょう。Decayでは精度が悪くなってしまうのです。これはMixupの正則化が強すぎるので(既にもう相当正則化強いですが、Mixup入れると訓練精度よりテスト精度のほうが平均的に高いという現象が往々にして起こります)収束に時間がかかってしまうのです。Decayで学習率が低くなってしまい、単に収束していないからというのが精度の悪化原因です。Annealingに頼りたくなります。Annealingでの結果です。全て学習率の上限と下限は一緒(0.1、0.001)です。94.47%訓練エポック数を長くしたので強めのMixupも使えるようになりました。そこで0.5と1.0(1.0の場合は乱数が一様分布です)を試した結果、Mixupのβが0.5が最も良かったのでこれを採用しました。Augmentationで使われるのは稀ですが、カラーヒストグラムのスケール調整です。コントラストが低い画像のカラーヒストグラムを引き伸ばして、コントラストを強調します。Contrastが結構効きました。ContrastはMixupの前に入れます。以降、Mixupは全て最後に入れることにします。1%)Mixup(beta=0.5)ジェネレーターはこのようにします。Contrastを入れます。0.5)精度は95.07%と直近から0.56%も改善しました。ここまで煮詰まっている中で今までで最大のゲインが得られたのは正直びっくりでした。Augmentation次第で10層CNNでもエラー率5%切りできるのを見るとAugmentationって大事なんだなーと思い知らされます(逆に言うとネットワーク構造は論文いっぱい出てるけど、思っているほど重要ではなさそう)。混同行列を見ると、犬のクラスが9割超えを達成できました。Contrastは安定的に上がっている(下がったとしてもわずか)というのが確認できます。Contrastで大きく上がったクラスは、そもそもの画像のコントラストが不鮮明だったというケースです。個別に見ていくと、鳥が924→945で2.1%の改善、鹿が945→963で1.8%の改善で、この2つが主に牽引しているのがわかります。鳥や鹿のような自然に溶け込む画像はコントラストが低かったのでしょう。コントラストが不鮮明なのを鮮明にすると効くということは、同様にエッジを鮮明にする(画像のシャープ化をする)と精度がよくなるのではないかという仮説も浮かびます。Augmentのポリシーでも、「ImageEnhance.Sharpness」というのが採用されているので、確かにやってみる価値はありそうです。他の没ケースについて述べてからシャープ化を試してみます。Contrastの中での没ケースです。ContrastにはCutoffという引数があり、デフォルトでは0です。Cutoffの値を0より大きくするとスケール調整だけでなく、ヒストグラムの中から一部(おそらく低い値と高い値?)を捨てるということを行います。これによってより強いコントラスト補正ができるというわけです。Cutoffの値を調整してみました。95.07%Cutoffによる有無は誤差挙動感ありますが、この中ではCutoff1%が最も良かったのでそれを使いました。EqualizeImageOps.autocontrastの亜種に、ImageOps.equalizeというのがあります。これはカラーチャンネル間のヒストグラムを均一化するという操作を行います。autocontrastはスケール調整だけなので、RGBのヒストグラムは違うままですが、equalizeはヒストグラムの均一化をするので、個々の分散の情報がおそらく落ちてしまうのではないかと思われます。ContrastしてからEqualizeするというケースを試しました。Contrastしてから、50%の確率でEqualizeするというのを行いました。ContrastとEqualizeの違いを比較してみました。Contrastは若干コントラストが強調され、色調はそのまま。Contrastは色調は作られた感じになりますが、コントラストが強調されていい感じになっています(この場合はたまたまうまく行っています)。Equalizeはこの場合は微妙ですね。Augmentationを入れてもやっぱりうまくいきませんでした。94.51%いずれも0.8%~0.5%の悪化となっています。分散の情報を捨てるのはよくないですね。最後のAugmentationとして画像のシャープ化を行います。シャープ化といっても、アンシャープまでできるのが面白いところで、「ImageEnhance.Sharpness」という関数を使います。255.0enhanceに食わせるfactorの値がポイントとなります。1ならもとの画像と同じ、1より小さくするとぼやけた画像に、1より大きくするとよりシャープな画像になります。-10や10といった極端な値を放り込むと逆にノイズが出ます。シャープ化の差はlenaだと分かりづらいかもしれませんね。ジェネレーターはこんな感じに。0.5)設定は以下の通り。Sharpness(1±1)Mixup(beta=0.5)結果は95.30%(0.27%の改善)となりました。magnitude=1で満足してしまったけど、もうちょっと調整すれば上がるかもしれません。10層のCNNで95.30%なんて出るなんてびっくりですね。Augmentationだけ)との混同行列の比較です。してみると明らかに良くなっているのがわかりますね。精度向上に特に寄与したのが押し上げたのは猫(6.1%)、鳥(4.9%)とカエル(3.3%)でした。犬も1.9%の改善となっているので、焦点の犬猫の誤分類を中心としたAugmentationは一応は達成されたということになります。「データのお気持ちを考えながらやる」Augmentation、なんとなくこんな感じというのがわかったでしょうか。学習曲線はこのようになりました。Augmentと比較してみます。28-10ではエラー率2.6%±0.1%を記録しました。ResNetの実装はTensorFlow(非Kerasなのですが)、それを自分がKerasに書き換えました(ちょこっといじっただけ)。それを実行したところ、精度は97.3%とエラー率で2.7%となりました。Augment気持ちマイナス程度の精度は出せたということになります。Augmentは最適なポリシーを見つけるのにGPUで5000時間かかったとのことなので、多分オレオレの人力のほうが速いはずです(一週間程度でここまでいけました)。ネットワーク以外は7の設定と同じです。このときの混同行列は次のようになります。28-10が係数35M程度で97.3%なので、係数に見合った分の精度は出ているということになります。して考えるとモデルを大きくして精度を確保するというのは、コスパ的にはあまりよろしくなさそうな感はあります。SOTAを取りたいのなら別でしょうが。10層CNNのベースライン、10層CNNの最終段階、WideResNetの最終段階の混同行列の比較は次のようになります。して見ると、間違いやすいクラスというのは、ネットワーク問わずあまり変わらないというのがわかります。ネットワークの深さはあくまで全体の精度を押し上げているだけで、特定のネットワークが特定のクラスを検出しやすかったり、ネットワーク間で得意なクラスに偏りがあるのようなケースは今回は確認できませんでした。WideResNetの個々のエラー分析を見てみましょう。97.3%なので個数が相当減っています。「本当は猫で予測が犬」のケースです。33件まで減っています。こちらは「本当は犬で予測が猫」のケースです。31件まで減っており、犬猫のミスは合計で64件となりました。ベースラインから半分ぐらいになっています。してみると、白黒の犬・猫は依然として間違いやすいというのがわかります。件数としてはぐっと減りますが、「本当はトラックで予測が自動車」のケースです。半分ぐらいは人間でも「これ自動車でしょ」みたいなケースがあるので、これは間違っても仕方がないかなと思います。「本当が飛行機で予測が船」のケースです。これはベースラインでもありましたがぐっと減って10件となりました。細部の構造見てくれるといいかもしれませんね。「本当が鳥で予測が猫」のケースです。形だけ見ると猫とあんまり変わらないような気がします。言われないと気づかないような。くちばしのような形状に着目してくれるといいんですけどね。精度推移まとめカテゴリー別、全体がどのように精度向上してきたかをまとめます。Augmentation)との差分です。クラス別精度をBaseの値から引いたものです。これを見ると、7番目のAugmentationを入れてようやく全クラスがベースラインよりプラスとなる結果になりました。飛行機なんかは1~4までのAugmentationが逆効果になっているのがわかります。直近との差分こちらは直近のAugmentationとの差分です。飛行機の7(Sharp)だったら、7(Sharp)の飛行機の正答率の95.3から、6(AC)の飛行機の正答率の94.5を引いて「0.8」となります。これを見ると、Augmentationにもクラス別に得意不得意があるというのがわかります。均して見ると精度が微増でも、クラス別に見ると、大きく精度が上昇しているケースもあれば、逆に精度が落ちて足を引っ張っているケースもあります。10層CNN→WRNのようなネットワークレベルでの拡張はどのクラスでも精度が上がっていることが確認できます(それはそう)。Augmentation効果が高かったもの低かったもの10層CNNの範囲内でベースライン以降、特に上昇幅の大きかったAugmentation、クラスを列挙すると次のようになります。これらは追加したAugmentationが効きが良かったというケースです。2%以上の上昇のものを列挙しました。2.4%効果が高かったものはなんかわかりすい気がします。カエルはそもそも小さい生物なので、ズームをしてあげることでよりカエル本体が中心にきやすくなるのでしょう。色調補正は猫や特に鳥のようにカラーバリエーション豊富な生物で効いています。犬猫は決定境界が割と曖昧で、色調補正で猫は大きく上昇していても、犬で大きめの下落があるので、そこは割り引いて考える必要があります。回転の馬は何なんでしょうね。馬は姿勢が斜めになるような写真がありそうなので、そこの補正が効くのでしょうか。猫にダイレクトに効いているのはMixupで、犬側の悪化もありません。犬猫のように決定境界が曖昧なケースでは、Mixupのようなソフトラベルはかなり有効ではないかと思われます。Contrastはくすんだ画像で有効でしょう。カットオフを入れなければ副作用はほとんどないはずなので、これは入れてみるといいと思います。Normalizationと似たような効果があるはずです。Exampleを使ったAugmentationに近いようなことをやっているのかもしれません(素人なのでよくわからん)。逆に精度が下がってしまったケースも列挙します。これはAugmentationの副作用があったケースです。1%以上の下落のものを列挙しました。-1.1%色調補正は諸刃の剣で、カラーバリエーションが豊富なクラスでは有効ですが、飛行機や馬のように割と色が固定されるようなケースでは精度の悪化が目立ちます。回転の猫は謎ですが、混同行列を見ると鳥、鹿、犬といった生物への誤答が増えているので、猫があんまり取らないような角度に補正すると他の生物へ誤答してしまうのでしょう。Erasingの副作用は飛行機やトラックのような機械で目立ちます。この副作用は船やトラックといった近いクラスに誤分類されてしまうことです。Erasingは生物の分類のように特徴的な形質以外に注目してほしいときは有効ですが、機械のようにある特定の部分が重要なファクターとなっているケース(例えばトラックだったら荷台、飛行機だったら空や尾翼)では逆効果ということがわかります。Mixupの鹿、シャープ化の鹿も猫、カエル、馬といった周辺の生物への誤答が増えています。Contrastのような鮮やかにする系で精度が伸びる鹿のクラスでは逆効果なのでしょうか。副作用のほうはあんまりわかりやすい結果にはなりませんでしたが、なんとなくそれっぽい理由はありそうです。ResNetは関数部分だけいい感じにコピーして使ってください。まとめデータのお気持ちを考えるの意外と深かった。混同行列の推移見るのや、間違ったやつをプロットしてみるエラー分析意外と使えるかもしれない。「なんでこういうAugmnentationするんや?」みたいなもやもやが消えて割とすっきりしました。一度こういうのやってみるといいかもしれませんね。Augmentationでは触れられない一般的な画像処理:オートコントラストやシャープ化といった処理も、精度向上に効くことが確認できました。移動や回転といったアフィン変換系ばっかりやっている場合はこっちも考慮に入れてみるといいかもしれませんね。Augmentに近い精度が出せたのはびっくりしました。Commentコメントをキャンセルメールアドレスが公開されることはありません。