自己管理学習とコンピュータビジョン

自己管理学習とコンピュータビジョン

 2020年1月15日午前八時05分47秒

出典:  https://www.fast.ai//2020/01/13/self_supervised/ 

 

自己管理学習の概要

可能な限り、あなたはそれを事前に訓練されたモデルを使用して、ニューラルネットワークのトレーニングを開始し、微調整することを目指すべきです。それは手段ですので、あなたは本当にあなたがすべてで何かをする方法を知らないモデルで開始していることを、ランダムな重みで始まることにしたくありません!事前訓練を使用すると、ゼロから始めるよりも1000倍以下のデータを使用することができます。

ドメインには事前に訓練されたモデルが存在しないのであれば、あなたは何をすればいいですか?例えば、医療用画像処理の分野では非常に少数の事前訓練を受けたモデルがあります。一つの興味深い最近の論文、  輸血:医療画像用の理解転送の学習は  この質問を見て、pretrained ImageNetモデルからさらにいくつかの初期の層を使用すると、トレーニングの速度、および医療用画像モデルの最終精度の両方を向上させることができることを確認しました。したがって、あなたはそれがあなたが作業していることを問題のドメイン内にない場合であっても、汎用の事前訓練を受けたモデルを使用する必要があります。

しかし、この論文のメモとして、医療用画像に適用ImageNet pretrainedモデルからの改良の量は、その素晴らしいではありません。私たちはより良い動作しますが、大量のデータが必要になりますしない何かをしたいと思います。秘密は「自己管理学習」。我々はむしろ、別個の外部ラベルを必要とするよりも、天然に入力データの一部であるラベルを使用してモデルを訓練するところです。例えば、これは秘密です  ULMFiT、劇的にこの重要な分野における最先端のを改善し、自然言語処理トレーニングアプローチ。ULMFiTでは、「事前訓練をすることから始め言語モデルを」 -それは、学習するには、文の次の単語を予測することモデルです。私たちは、必ずしも言語モデル自体に興味を持っていませんが、それは、このタスクを完了することができ、モデルがその訓練の過程で世界について、言語の性質と偶数ビットについて学ばなければならないことが判明します。我々はそのような感情分析として、別のタスクのためにそれを、このpretrained言語モデルを取り、微調整したい場合には、それは我々が非常に迅速に非常に少ないデータで最先端の結果を得ることができることが判明しました。この作品は、これを見て持っているかの詳細については  ULMFiTへの導入  と言語モデルの事前訓練を。

コンピュータビジョンにおける自己管理学習

では、我々は「として知られている事前訓練のために使用することをタスクを学習自己監督口実タスク」。私たちはその後、微調整のために使用することのタスクが「として知られている下流のタスク」。自己管理学習は、ほぼ普遍的自然言語は、今日の処理に使用されていてもが、私たちが想像するより、どのように動作するかも与えられ、コンピュータビジョンモデルであまり使用されています。ImageNet事前訓練はとても広く成功しているので、このような医療用画像など地域社会で人々が自己管理学習の必要性とあまり馴染みの可能性があるので、おそらくこれはあります。この記事の残りの部分では、私は、これはより多くの人々がこの非常に有用な技術を活用するに役立つかもしれないことを期待して、コンピュータビジョンにおける自己教師付き学習の利用を簡単に紹介を提供に努めます。

ニーズはコンピュータビジョンにおける使用の自己管理学習するために回答することが最も重要な問題は次のとおりです。「あなたが使用すべきか口実タスク?」それは、あなたが選ぶことができる多くがあることが判明しました。ここではいくつかのリストであり、紙のアプローチを示す各セクションの紙から画像とともに、それらを説明します。

カラー化

紙1、  用紙2、  用紙3

正しい場所に画像パッチを配置

紙1、  紙2

右の順にフレームを配置します

紙1、  紙2

修復

分類は、画像を破損しています

In this example, the green images are not corrupted, and the red images are corrupted. Note that an overly simple corruption scheme may result in a task that’s too easy, and doesn’t result in useful features. The paper above uses a clever approach that corrupts an autoencoder’s features, and then tries to reconstruct them, to make it a challenging task.

Choosing a pretext task

The tasks that you choose needs to be something that, if solved, would require an understanding of your data which would also be needed to solve your downstream task. For instance, practitioners often used as a pretext task something called an “autoencoder”. This is a model which can take an input image, converted into a greatly reduced form (using a bottleneck layer), and then convert it back into something as close as possible to the original image. It is effectively using compression as a pretext task. However, solving this task requires not just regenerating the original image content, but also regenerating any noise in the original image. Therefore, if your downstream task is something where you want to generate higher quality images, then this would be a poor choice of pretext task.

You should also ensure that the pretext task is something that a human could do. For instance, you might use as a pretext task the problem of generating a future frame of a video. But if the frame you try to generate is too far in the future then it may be part of a completely different scene, such that no model could hope to automatically generate it.

Fine tuning for your downstream tasks

Once you have pretrained your model with a pretext task, you can move on to fine tuning. At this point, you should treat this as a transfer learning problem, and therefore you should be careful not to hurt your pretrained weights. Use the things discussed in the ULMFiT paper to help you here, such as gradual unfreezing, discriminative learning rates, and one-cycle training. If you are using fastai2 then you can simply call the fine_tune method to have this all done for you.

Overall, I would suggest not spending too much time creating the perfect pretext model, but just build whatever you can that is reasonably fast and easy. Then you can find out whether it is good enough for your downstream task. Often, it turns out that you don’t need a particularly complex pretext task to get great results on your downstream task. Therefore, you could easily end up wasting time over engineering your pretext task.

Note also that you can do multiple rounds of self-supervised pretraining and regular pretraining. For instance, you could use one of the above approaches for initial pretraining, and then do segmentation for additional pretraining, and then finally train your downstream task. You could also do multiple tasks at once (multi-task learning) at either or both stages. But of course, do the simplest thing first, and then add complexity only if you determine you really need it!

If you’re interested in learning more about self-supervised learning in computer vision, have a look at these recent papers:

おすすめ

転載: www.cnblogs.com/wangxiaocvpr/p/12194871.html