Vous pourriez penser, "Grid Mix? Je n'en ai jamais entendu parler." C'est vrai. Inspiré par Grid Mask et Cut Mix ** Je l'ai fait moi-même ** Augmentation comme indiqué ci-dessous. J'ai essayé un peu de voir si ça marche, donc je vais le laisser comme mémo.
** Précision: La méthode proposée (Grid Mix) est légèrement meilleure ** ** Convergence: La méthode existante (CutMix) est excellente ** ** Réglage: la méthode proposée (Grid Mix) peut être plus gênante **
Je ne suis pas sûr car c'est juste pour le plaisir, mais j'ai pu confirmer le potentiel minimum.
L'une des augmentations de données récemment annoncées est Grid Mask. Comme le montre la figure ci-dessous, il s'agit d'une méthode qui masque l'image dans un motif de grille, ce qui est supérieur à la méthode conventionnelle telle que la découpe.
Étant donné que diverses personnes l'ont déjà introduit dans Qiita, etc., je vais omettre les détails, mais ce sera une méthode pour découper au hasard une partie de l'image, la coller sur une autre image et donner un rapport étiquette par zone. Je vais. Document source: https://arxiv.org/abs/1905.04899
J'ai toujours eu des doutes sur CutMix. La quantité d'informations semble être plus grande près du centre, mais je me demande s'il est acceptable de simplement décider de l'étiquette en fonction du rapport de superficie.
Par exemple, dans la figure ci-dessous, la moitié des zones sont des chats et l'autre moitié sont des chiens, mais je pense qu'il est difficile de diviser les étiquettes en deux. Cela me ressemble seulement.
Avec un modèle commun, la formation est effectuée sur l'ensemble de données cifer10 dans les trois cas suivants pour comparer la précision.
CNN peu profond de couche Conv8 (non pré-entraîné) input shape: 32x32x3
GridMix Augmentation La méthode proposée est comme un enfant de CutMix et GridMask, qui mélange des images avec une grille de taille appropriée. ** Le masque est essentiellement un motif en damier, mais il est probable qu'un motif de maillage ou aucun mélange ne se produise. ** **
La figure ci-dessous montre le motif en damier, le motif de maillage et aucun mélange dans l'ordre à partir de la gauche.
** Si seul le motif en damier était utilisé, le rapport de mélange était constant à environ 0,5 et la convergence était médiocre **, j'ai donc essayé de le rendre facile dans certains cas. En ajoutant un motif de maillage, il est possible de reproduire quelque chose de proche de la méthode existante CutMix.
def grid_mixer(img_1, img_2, interval_h, interval_w, thresh=0.3):
#make checkerboad
h, w, _ = img_1.shape
h_start = np.random.randint(0,2*interval_h)
w_start = np.random.randint(0,2*interval_w)
h_grid = ((np.arange(h_start, h_start+h)//interval_h)%2).reshape(-1,1)
w_grid = ((np.arange(w_start, w_start+w)//interval_w)%2).reshape(1,-1)
checkerboard = np.abs(h_grid-w_grid)
#reverse vertical and/or horizontal
if np.random.rand()<thresh:
checkerboard += h_grid*w_grid
if np.random.rand()<thresh:
checkerboard += (1-h_grid)*(1-w_grid)
#mix images
mixed_img = img_1*checkerboard[:, :, np.newaxis]+img_2*(1-checkerboard[:, :, np.newaxis])
mix_rate = np.sum(checkerboard)/(h*w)
return mixed_img, mix_rate
h,w,_=img_1.shape
interval_h = h//np.random.uniform(2, 4)
interval_w = w//np.random.uniform(2, 4)
img, mix_rate = grid_mixer(img_1, img_m_2, interval_h, interval_w, 0.3)
Comme indiqué ci-dessous, le manche est qu'il y a quelques paramètres.
** Espacement de la grille: ** Si la largeur de la grille est trop fine, il semble qu'elle ne puisse être captée que dans des couches peu profondes (puisque la taille par défaut de cifer-10 est de 32x32), j'ai donc défini l'image pour qu'elle soit divisée en 2 à 4 parties verticalement et horizontalement. Je pense que ce domaine dépend aussi du modèle. Le rapport hauteur / largeur de la grille est également défini pour être aléatoire, mais l'effet n'a pas été confirmé.
** Seuil de passage du motif à damier au motif maillé: ** Le masque horizontal est exclu avec une probabilité de 30% et le masque vertical est exclu avec une probabilité de 30%. En conséquence, 49% auront un motif en damier, 42% auront un motif en maille et les 9% restants n'auront aucun mélange. Après tout, cela fait la même chose que d'ajuster la distribution β utilisée dans CutMix et ainsi de suite.
Le tableau ci-dessous montre les valeurs moyennes exécutées trois fois après le réglage de la fréquence d'apprentissage et des paramètres de planification.
Case | Epochs | Val_Accuracy | Val_Loss |
---|---|---|---|
No Augmentation | 25 | 0.805 | 0.710 |
CutMix (beta=alpha=0.7) | 32 | 0.841 | 0.505 |
GridMix | 45 | 0.852 | 0.463 |
Grid Mix est lent à converger ... Vous voudrez peut-être couper les premières époques. Mais la précision est un peu meilleure. Ce n'est qu'un cas au plus, mais je ressens une petite possibilité.
En conclusion, ** CutMixing comme une Grid peut être meilleur que CutMix normal **. La vérification étant insuffisante, elle n’est que possible. Je ne peux rien dire sans essayer un peu plus. Si quelqu'un en a envie, il pleurera et sera heureux si vous essayez. Si ça ne marche pas du tout, je pleure et je m'excuse.