5 Y% }( d# R4 c/ a- x7 h k+ m9 ~距离你解决小样本/少数据难题,只差这篇文章2 G. R; U, z3 y( R- l- `
文章目录 : U. u( |$ B2 N% A- h什么是小样本学习? 3 m8 D! c' g, A) }' y( u9 L8 x小样本学习变体 2 B& j" X* z0 E& A& e/ Z" RZero-Shot Learning (ZSL)$ t* ^( N9 C# y, F
One-Shot和Few-Shot" z( ^/ \$ {& c- K$ z% }
小样本学习方法; S. D! a/ e9 }2 ]
数据级方法 I8 e9 {! d2 ?/ ^ I& L4 x/ e( C2 l* \
参数级方法% U, @: l' I, W6 s$ n0 {) {' ~) F) O
Few-Show目标检测 1 I# u& V5 @- E8 {5 \2 O) t- b" {YOLOMAML % X0 X, r( {& E2 _小样本解决方法进阶 ; ]9 T a1 G! m, G2 t+ f3 E总结. \/ U: w/ i( z% `7 A
如今,在使用数十亿张图像来解决特定任务方面,计算机可以做到超过人类。尽管如此,在现实世界中,很少能构建或找到包含这么多样本的数据集。1 v' s8 Y) t! w5 C, t% n
# t X: R: V4 H 8 v# D" W1 U: x v X% b& c3 g" N7 ~" ?+ l. H( r& Q$ E5 j2 _
3 J6 ]8 Y! y F! x/ ]; @
我们如何克服这个问题? 在计算机视觉领域,我们可以使用数据增强 (DA),或者收集和标记额外的数据。DA 是一个强大的技术,可能是解决方案的重要组成部分。标记额外的样本是一项耗时且昂贵的任务,但它确实提供了更好的结果。 " y( k: r8 A t H( g+ f ( E* X I) L# D0 [3 T 9 R. b# ~4 T# }如果数据集真的很小,这两种技术可能都无济于事。 想象一个任务,我们需要建立一个分类,每个类只有一两个样本,而每个样本都非常难以找到。 ; O8 [$ M A$ X9 j6 h; ]6 ]' B' P8 h# r0 a3 L5 a% \7 ~! z
! M! `" B; R% s: V3 v# [这将需要创新的方法。小样本学习(Few-Shot Learning, FSL)就是其中之一。( n' R9 K. A$ F
4 g% R% B8 l8 J8 ]! V
& _; R% n/ Q" o. R: y
. F; F* f# c' V
6 k+ q# F2 I' U+ n/ f% u
3 s/ J) f5 H* h! r
/ l( f# {# _9 a. D9 _
少样本学习(few-shot learning)是一个未来 AI 的发展方向之一。 . p5 v# ]( T5 p' {6 p/ o9 f; P7 C b( ?$ k
7 @7 I' ]: w5 W0 V$ N0 A2 o2 R- r
首先现在深度学习和人类智能有一个显著性的差异,以图片分类为例,我们人类可以: (1). 从很少的图片中抽象出一个新的概念,比如我们可以在看过几张拉布拉多和柯基图片之后(假设我们之前不知道这两种狗的特征),快速分辨后续图片中的拉布拉多和柯基。(2). 甚至可以不看图片就可以得到新的概念,比如告诉你条纹马叫做斑马;但是我们现有的常见的深度学习模型则需要大量的图片来训练模型,比如常见的 MNIST 数据集,一般训练集为 6000 张图片,但其实只分类 0-9 的图片 (我们人类需要吗?)。这一巨大的差异就导致很多人研究少样本学习中来。以上两种情况就是常见的 few-shot 和 zero-shot 的场景。7 ^, v, P( n2 h
. q6 M$ @8 u: s9 \) B: S' E8 c$ v9 q9 C) b4 k
以 MNIST 的 few-shot 为例,我们只要一个类各一张图片,也就是 10*1 = 10 张图片来训练我们的模型,就可以分类剩余的所有图片,如果可以到这一步,深度学习和人类智能的差距会缩小很大一部分。这个问题的难点在于训练样本的数量对于深度学习来说太少了,很容易过拟合。 # A; w& b+ Q# s6 r; [) U. l+ A4 A ! O# p0 T3 C" ` ~/ |6 F/ L8 Q: s8 g+ P2 X9 y/ K, I
解决方法:1 h3 g3 |. r. `' J4 A
/ R# S! b& o' z6 f$ c0 `
5 D8 Y } U& M/ Y. h% t( n(1) 数据增强和正则化:第一种思路很直接,既然训练数据少,那我们就增加训练数据,例如我们经常看到的 Omniglot 数据集中的图片旋转 90° 的倍数来增加数据集中训练样本的数量(虽然本意不是用于解决 few-shot 问题)。还有就是既然会过拟合,那就加一个正则化项来缓解过拟合的问题。- }! v8 j( j7 [8 y& b4 w
2 g# @ e5 v! {1 T5 E. U
/ L1 F% W: I, D( N9 S
(2) Meta-learning(元学习):这是现在主流的方案,元学习的目标是利用已经学到的知识来解决新的问题。这也是基于人类学习的机制,我们学习都是基于已有知识的,而不像深度学习一样都是从 0 开始学习的。如果我们已有的先验知识来帮助我们解决新的问题,那么我们对于新的问题就可以不需要那么多的样本,从而解决 few-shot 问题。但是元学习需要用一些别的数据来学习这个先验知识,例如分类 MiniImagenet,其中有 100 个类,我们用其中 60 个类来学习先验知识,20个做 validation,剩余 20 个做测试。**注意我们测试的 20 个类和前面 80 各类是完全不同的,也就是新的类、新的概念、新的问题,并且这 20 个类每个类只有很少的几张图片 (few-shot 问题)!**然后前面的 80 个类用来用来训练模型和确定超参数,也就是学习帮助我们解决新问题的先验知识。 ) u! W0 ^# q( S0 w M( [+ ^- K. R9 [8 p6 K( x
" d0 O' h5 ?' G! L
我们可以发现如果我们需要解决上述的 MNIST 少样本分类问题,可以直接用方法 1,但是方法 2 不行,因为我们没有别的类来做先验知识的学习,这确实可以看成一个问题。但是元学习有自己的方法:我们可以在另一个数据集上面训练学习先验知识(前面的 MiniImagenet 中的 100 个类都是一个数据集),例如从 Omniglot 中学习先验知识,用于 MNIST 的少样本分类(因为有种说法 Omniglot 可以看做 MNIST 的一种扩展)。当然这种方法的效果和两个数据集的相似度有关,两个数据集相似度很好,那么学到的先验知识可以很好地解决新数据集的 few-shot 问题,如果差异很大,可能效果会很一般。: C% Y" |3 K2 M5 r' L
5 g: g( d5 @# {6 ]( g- ?8 D z: l) ?+ h9 @. g
* k6 _( \: w8 A7 E4 u0 K5 C& V. u
. l1 O0 t' w- r: {! P' @
5 M' Z( j" k; \) T- n( k/ I& E) f1 ~
# _4 m0 P- g+ X, k
什么是小样本学习?6 \1 p8 X. C9 e
7 s% c" @& f- ~0 l ) q6 z; U, i3 O3 S & W& I# u2 }! R% W5 y # q7 G) y8 Q; J0 e+ x K# ^- }: KFew-Shot Learning(以下简称FSL)是机器学习的一个子领域。在只有少数具有监督信息的训练样本情况下,训练模型实现对新数据进行分类。0 M$ r$ w3 ^/ w
& X7 i N, F* r. `2 Y" U ; c% X) {" |$ R9 X4 UFSL 是一个相当年轻的领域,需要更多的研究和完善。计算机视觉模型可以在相对较少的训练样本下很好地工作。在本文中,我们将重点关注计算机视觉中的 FSL。 ; L' A$ i. a. A2 R2 C8 W0 t- l# H! f1 Q# R8 F2 o
/ N# W' A( N/ F3 y% C1 F+ }) O例如:假设我们在医疗保健行业工作,在通过 X 射线照片对骨骼疾病进行分类时遇到问题。( \! z$ }; P6 Q% C' u4 `* q1 S
D" C' h9 n) C& s u/ R1 S: o% { 1 }: z0 K. F6 N; j7 G) q* Y8 O; o一些罕见的病理可能缺乏足够的图像用于训练集中。这正是可以通过构建 FSL 分类器解决的问题类型。9 _/ _+ X0 @( X5 v4 @* D% }" \* J
8 k- G9 u2 t @ F
9 e2 L3 [. M) z: f& e& s3 X- U; D小样本学习变体' S2 |( h( G$ }( q: \1 t
3 ]9 F1 l# E) P8 G' K: H7 @! y' }9 ?, j3 m1 Y7 q
, _: h+ W( E$ C3 y$ A
( c s: m$ H: D" ]6 s7 q
根据FSL的不同变化和极端情况可以分为四种类型: - g( O# |0 e- {* g2 I7 V0 w ; E1 B' p2 I* K0 t. o & I- R* w) P( @/ H! T( ]: ^, |N-Shot Learning (NSL)/ N6 p7 `5 x" p$ X- B
2 b. n5 Y* U8 @& m( q1 w
. _/ J% q5 W7 m5 V
Few-shot Learning (FSL) _, n# ^& z% K$ B$ I ! P# U' [( a& M A2 x) E2 I: L! M- W* m2 a5 b# D2 k
One-Shot Learning (OSL)" {# @6 J8 Q6 p+ m* @
) e0 j K6 q ^( J* a; [. g
" ^, `3 _' Q; |' m6 u$ ^$ G( Y c
Zero-Shot Learning (ZSL) + g: c5 c, N! m. @3 Z: F" R( U" k" r7 A) {/ m# P1 I" ]
" q2 q5 p& U u; q! N$ |! U
当我们谈论 FSL 时,我们通常指的是 N-way-K-Shot-classification。/ D. W9 u/ @; L+ s3 {+ O
8 b# T' \. M7 U7 J Z2 _$ n% ~ \+ X
* \* ^. N7 [: _9 n% W( gN 代表类别的数量,K 代表每个类别要训练的样本数量。* F2 s1 P) i, k; r. D4 {. l
- R* }# q% _2 I" P
$ M! q) ?$ k* A0 T5 n( X9 ^3 t
N-Shot 学习被视为比所有其他概念更广泛的概念。这意味着,Few-Shot、One-Shot 和 Zero-Shot Learning 是 NSL 的子领域。' F' E q3 e) p5 N- e, {# F% L
! q9 y# l* [- ]% M4 W; f( ]8 u/ d* k8 J- b2 ?+ @, _
& ]7 p$ y9 }! U+ l. Y
4 G! S7 I$ Z O5 z, a, C1 C% z
4 b, s& K' n% H4 X7 Z
2.传统的图像金字塔和多尺度滑动窗口检测5 m/ \6 G: G; @! z$ p0 H
最开始在深度学习方法流行之前,对于不同尺度的目标,大家普遍使用将原图build出不同分辨率的图像金字塔,再对每层金字塔用固定输入分辨率的分类器在该层滑动来检测目标,以求在金字塔底部检测出小目标;或者只用一个原图,在原图上,用不同分辨率的分类器来检测目标,以求在比较小的窗口分类器中检测到小目标。著名的人脸检测器[MTCNN](Joint Face Detect ion and Alignment using Multi-task Cascaded Convolutional Networks)中,就使用了图像金字塔的方法来检测不同分辨率的人脸目标。7 f0 p" Y7 ^ g% n. @5 d
" J p% E& F9 K6 y, H& S
. k. w( |. N9 i6 O
3 O; B' M* I3 R& _" U' A+ k 9 w( [5 q4 T" j+ L$ r& u$ I1 t- Y/ I
$ e' p' h/ o9 \& s / B5 _0 s# t. H; o. c总结% M7 H+ f. B/ [6 y
在本文中,我们已经弄清楚了什么是Few-Shot Learning,有哪些 FSL 变体和问题解决方法,以及可以使用哪些算法来解决图像分类和目标检测 FSL 任务。 . P {/ m1 k# W; j+ I C2 v ; x( p7 C5 U+ ?# I4 Y8 y- v0 j1 K y2 G3 q% c. B J( _/ J* ?
Few-Shot Learning 是一个快速发展和有前途的领域,但仍然非常具有挑战性和未经研究,还有很多工作要做、研究和开发。 " T3 i* ~8 t0 I' [! G————————————————- D+ O% Z9 V6 g6 P2 e. L& O
版权声明:本文为CSDN博主「cv君」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。3 R& F P* R7 x ]" S
原文链接:https://blog.csdn.net/qq_46098574/article/details/1182559562 n, ]9 Y* r3 ^: q6 b2 v6 K
! [1 B. ^9 ^( w( ~; T
6 } Q9 n9 @' ]2 y1 b( h