πŸ€– ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹ ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… DeepFashion с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Fastai

Π‘Ρ‚Π°Ρ‚ΡŒΡ описываСт ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΊΠ»Π°ΡΡΠΎΠ²ΡƒΡŽ ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° основС ΠΌΠΎΠ΄Π΅Π»ΠΈ ResNet34 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ популярных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ PyTorch ΠΈ Fastai. Автор Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ с Ρ€Π΅Π²ΠΈΠ·ΠΈΠΈ Π·ΠΈΠΌΠ½Π΅ΠΉ ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹ ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ нСйросСтями.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ я Π½Π°Ρ‡Π°Π»Π° Ρ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ свой Π³Π°Ρ€Π΄Π΅Ρ€ΠΎΠ±, Π° Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΉΡ€ΠΎΠ½Π½ΠΎΠΉ сСти. ВСкст публикуСтся Π² ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅, Π°Π²Ρ‚ΠΎΡ€ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π’Π°Ρ‚ΡŒΡΠ½Π° Π‘Π΅Π½Π½ΠΈΠΊΠΎΠ²Π°.
Π€ΠΎΡ‚ΠΎ Π ΠΎΠΌΠ°Π½Π° Бамборского использовано ΠΏΠΎ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ Shutterstock.com.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ января – прСкрасный дСнь, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ свои Π·ΠΈΠΌΠ½ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ. ИмСнно это Π±Ρ‹Π»ΠΎ Ρƒ мСня Π½Π° ΡƒΠΌΠ΅, ΠΊΠΎΠ³Π΄Π° я ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠ»Π° ΠΊ своСму Π³Π°Ρ€Π΄Π΅Ρ€ΠΎΠ±Ρƒ мСсяц Π½Π°Π·Π°Π΄. ΠœΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½Ρ‹ΠΉ процСсс складывания свитСров, носков ΠΈ ΡˆΠ°Ρ€Ρ„ΠΎΠ² ΠΌΠ΅Π΄ΠΈΡ‚Π°Ρ‚ΠΈΠ²Π΅Π½ ΠΏΠΎ своСй ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ открытиям. Π’Ρ€ΠΎΠ΄Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ мСня Ρ‚Ρ€ΠΈ Ρ€ΠΎΠ·ΠΎΠ²Ρ‹Π΅ Π±Π»ΡƒΠ·ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ стиля. Π­Ρ‚ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ ΠΌΠ½Π΅ ΠΎΡΠΎΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ½Π΅ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ придСтся ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свой запас ΠΌΠΎΠ΄Π½Ρ‹Ρ… Π²Π΅Ρ‰Π΅ΠΉ, повысив ΠΈΡ… Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ ΠΈ сократив ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΈΡ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹. ЕстСствСнно, ΠΌΠΎΠ΅ΠΉ Ρ†Π΅Π»ΡŒΡŽ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ содСрТимого своСго Π³Π°Ρ€Π΄Π΅Ρ€ΠΎΠ±Π° Π² Π²ΠΈΠ΄Π΅ Π³Ρ€Π°Ρ„Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹, содСрТащСго Ρ‚ΠΈΠΏΡ‹ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² (свитСр, ΡˆΡ‚Π°Π½Ρ‹ ΠΈ Ρ‚.ΠΏ.), ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ (Ρ‚ΠΊΠ°Π½ΡŒ, ΡΡ‚ΠΈΠ»ΡŒ, Ρ†Π²Π΅Ρ‚ ΠΈ Ρ‚.Π΄.) ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ (ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠΎΡ‡Π΅Ρ‚Π°Ρ‚ΡŒ эти ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠ±Ρ€Π°Π·Π΅). Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я расскаТу ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я использовала для получСния своСго Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ – ΠΊΠ°ΠΊ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹ случайного ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°.

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ состоит ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… частСй:

  1. Π”Π°Π½Π½Ρ‹Π΅.
  2. ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
  3. ΠžΡ†Π΅Π½ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ.
  4. Как Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΎΠ±ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ модСль ΠΈΠ· Fastai Π² PyTorch.
  5. Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Π₯отя я Π³ΠΎΠ΄Π°ΠΌΠΈ использовала для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ обучСния Keras, Π½Π° этот Ρ€Π°Π· я Ρ€Π΅ΡˆΠΈΠ»Π° Π΄Π°Ρ‚ΡŒ шанс PyTorch ΠΈ Fastai. ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь.

Π”Π°Π½Π½Ρ‹Π΅

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊ ΠΊΠ°ΠΊΠΈΠΌ катСгориям относятся ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ ΠΌΠΎΠ΅Π³ΠΎ Π³Π°Ρ€Π΄Π΅Ρ€ΠΎΠ±Π°, ΠΌΠ½Π΅ потрСбуСтся модСль, обучСнная для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой Π·Π°Π΄Π°Ρ‡ΠΈ, Π° для обучСния Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½ΡƒΠΆΠ½Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅. Π’ этом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ я использовала Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… DeepFashion, ΠΎΠ³Ρ€ΠΎΠΌΠ½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… для прСдсказания ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹, ΡΠΎΠ±Ρ€Π°Π½Π½ΡƒΡŽ Π›Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠ΅ΠΉ ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΡ ΠšΠΈΡ‚Π°ΠΉΡΠΊΠΎΠ³ΠΎ унивСрситСта Π² Π“ΠΎΠ½ΠΊΠΎΠ½Π³Π΅.

Набор Π΄Π°Π½Π½Ρ‹Ρ… DeepFashion

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ ΠΎΡ†Π΅Π½ΠΊΠΈ классификации Π±Ρ‹Π» ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π² 2016-ΠΌ. Он ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ FashionNet Π² прСдсказании 46 ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ ΠΈ 1000 Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹. ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь: "DeepFashion: Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ распознаваниС ΠΈ восстановлСниС ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹ с ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌΠΈ аннотациями", CVPR 2016.

Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… DeepFashion содСрТит нСсколько Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Π’ этом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π½Π°Π±ΠΎΡ€ "Category and Attribute Prediction" ("прСдсказаниС ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²"). Π­Ρ‚ΠΎΡ‚ Π½Π°Π±ΠΎΡ€ содСрТит 289.222 Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… 46 Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ катСгориям.

ΠœΠ΅Ρ‚ΠΊΠΈ классов для обучСния хранятся Π² train_labels.csv Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅:

Π€Π°ΠΉΠ» Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… содСрТит располоТСниС Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΊΠΈ. ΠœΠ΅Ρ‚ΠΊΠΈ хранятся ΠΊΠ°ΠΊ строковыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅ train_labels.csv Π² класс ImageDataLoaders с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° from_csv:

data = ImageDataLoaders.from_csv(PATH, csv_fname=TRAINING_PATH,
                                 item_tfms=Resize(300),
                                 batch_tfms=aug_transforms(size=224, min_scale=0.9),
                                 valid_pct=0.1,
                                 splitter=RandomSplitter(seed=42), #seed=42
                                 num_workers=0)

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ дополнСния (augmentation) Π΄Π°Π½Π½Ρ‹Ρ… Fastai, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ ΠΏΡ€Π΅Π΄ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (presizing). Она сначала сокращаСт изобраТСния Π΄ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² мСньшСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π­Ρ‚ΠΎ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠ΅ дополнСния ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ быстрСС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ изобраТСния ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° GPU. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ примСняСм Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… (batch). batch_tfms ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ всС дополнСния Π²Ρ€ΠΎΠ΄Π΅ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ΠΎΠ² ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, с СдинствСнной интСрполяциСй Π² ΠΊΠΎΠ½Ρ†Π΅. Π­Ρ‚Π° стратСгия дополнСния ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ качСства Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π²Ρ‹ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π² скорости ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ вслСдствиС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° GPU.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ изобраТСния ΠΈΠ· нашСго Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ….

data.show_batch(max_n=6, nrows=1)
Π’Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ изобраТСния с ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ выглядят Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ изобраТСния, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ showImage=True Π² упомянутый Π²Ρ‹ΡˆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ show_batch().

Π”ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ изобраТСния

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, изобраТСния сохранили своС качСство послС дополнСния.

ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ

Π’ этом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ я использовала ΠΏΡ€Π΅Π΄ΠΎΠ±ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ модСль ResNet34. Π― экспСримСнтировала с Π±ΠΎΠ»Π΅Π΅ соврСмСнными Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°ΠΌΠΈ, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ ΠΊ сущСствСнному ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ. Основная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… DeepFashion – это качСство ΠΌΠ΅Ρ‚ΠΎΠΊ. НапримСр, Π½Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ рисункС Π²ΠΈΠ΄Π½Ρ‹ Π΄Π²Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹: Π±Π»ΡƒΠ·Π° ΠΈ ΡˆΠΎΡ€Ρ‚Ρ‹, Π½ΠΎ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΊΠ° лишь "Π±Π»ΡƒΠ·Π°". Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, модСль Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ ΡΡ‚Ρ€Π°Π΄Π°Ρ‚ΡŒ ΠΎΡ‚ ΡˆΡƒΠΌΠ°.

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ трансфСрноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ послСдний слой сСти Π½ΠΎΠ²Ρ‹ΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ слоСм, содСрТащим ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠ΅ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΉ, сколько классов Π² нашСм Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ нашСм случаС Π΅ΡΡ‚ΡŒ 46 ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² нашСм Π½ΠΎΠ²ΠΎΠΌ слоС Π±ΡƒΠ΄Π΅Ρ‚ 46 Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΉ. ВСса Π½ΠΎΠ²ΠΎΠ³ΠΎ слоя ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π΄ΠΎ обучСния наша модСль Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ случайныС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, Π½ΠΎ это Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ модСль ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ случайна. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ слои, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π½Π΅ мСняли, сохранят Ρ‚Π΅ ΠΆΠ΅ вСса, ΠΊΠ°ΠΊ ΠΈ Π² исходной ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΈ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ основныС гСомСтричСскиС Ρ„ΠΎΡ€ΠΌΡ‹, Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΈ Ρ‚.ΠΏ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±ΡƒΡ‡Π°Ρ‚ΡŒ Π½Π°ΡˆΡƒ модСль Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡŽ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΌΡ‹ Π·Π°ΠΌΠΎΡ€ΠΎΠ·ΠΈΠΌ всю ΡΠ΅Ρ‚ΡŒ, ΠΊΡ€ΠΎΠΌΠ΅ послСднСго слоя. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСса послСднСго слоя, Π½Π΅ мСняя вСсов Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… слоСв.

learn = cnn_learner(data, resnet34, metrics=accuracy, pretrained=True)
learn.fine_tune(2)
learn.save('stage-1_resnet34')

Когда ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ learn.fine_tune(), ΠΌΡ‹ Π·Π°ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π΅ΠΌ всю Π½Π΅ΠΉΡ€ΠΎΠ½Π½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ ΠΈ ΠΎΠ±ΡƒΡ‡Π°Π΅ΠΌ случайно ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ вСса нашСго Π½ΠΎΠ²ΠΎΠ³ΠΎ слоя ΠΎΠ΄Π½Ρƒ эпоху. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Ρ€Π°Π·ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π΅ΠΌ ΡΠ΅Ρ‚ΡŒ ΠΈ ΠΎΠ±ΡƒΡ‡Π°Π΅ΠΌ всС Π΅Π΅ слои Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ количСство эпох (Π² нашСм случаС Π΄Π²Π΅). Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΠΎΠ΄Π½Ρƒ "лишнюю" эпоху.

Ранняя ΠΎΡ†Π΅Π½ΠΊΠ° (Early evaluation)

Ранняя ΠΎΡ†Π΅Π½ΠΊΠ° позволяСт Π½Π°ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ прогрСсс обучСния Π½Π° Ρ€Π°Π½Π½ΠΈΡ… стадиях ΠΈ ΡƒΠ»ΠΎΠ²ΠΈΡ‚ΡŒ ошибки Π² Π½Π°ΡˆΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°Ρ…, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠΌ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π•ΡΡ‚ΡŒ мноТСство способов ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ обучСния Π½Π΅ΠΉΡ€ΠΎΠ½Π½ΠΎΠΉ сСти. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ быстроС прСдставлСниС ΠΎΠ± этом, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ΡΡ Ρ‡Π°Ρ‰Π΅ всСго:

interp = ClassificationInterpretation.from_learner(learn)
interp.most_confused(min_val=70)

Как ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, нСйронная ΡΠ΅Ρ‚ΡŒ Ρ‡Π°Ρ‰Π΅ всСго ΠΏΡƒΡ‚Π°Π΅Ρ‚ 'Top' (Ρ‚ΠΎΠΏ) с 'Blouse' (Π±Π»ΡƒΠ·ΠΊΠΎΠΉ), 'Romper' (ΠΊΠΎΠΌΠ±ΠΈΠ½Π΅Π·ΠΎΠ½) с 'Dress' (ΠΏΠ»Π°Ρ‚ΡŒΠ΅ΠΌ) ΠΈ 'Tee' (Ρ„ΡƒΡ‚Π±ΠΎΠ»ΠΊΡƒ) с 'Blouse' (Π±Π»ΡƒΠ·ΠΊΠΎΠΉ). Π”Π°ΠΆΠ΅ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ошибки. Π’Π°ΠΊΠΈΠΌ ΠΏΡƒΡ‚Π΅ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π° Ρ€Π°Π½Π½Π΅ΠΌ этапС ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π»ΠΈ обучаСтся наша нСйронная ΡΠ΅Ρ‚ΡŒ.

Π”Ρ€ΡƒΠ³ΠΎΠΉ способ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ошибки – это вывСсти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ:

interp.plot_top_losses(6, nrows=2)
ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ (ранняя ΠΎΡ†Π΅Π½ΠΊΠ°)

Как ΠΌΡ‹ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ, Π² исходных ΠΌΠ΅Ρ‚ΠΊΠ°Ρ… Π½Π΅ΠΌΠ°Π»ΠΎ ΡˆΡƒΠΌΠ°. Наша модСль ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ распознала Jumpsuit (ΠΊΠΎΠΌΠ±ΠΈΠ½Π΅Π·ΠΎΠ½), Π΄Π²Π΅ Skirt (юбки) ΠΈ Dress (ΠΏΠ»Π°Ρ‚ΡŒΠ΅), Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΊΠΈ для этих ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² Π² Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π±Ρ‹Π»ΠΈ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΌΠΈ.

Поиск скорости обучСния

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅ΠΌ ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ, Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌ Π² DataLoader, ΠΈ Π±ΡƒΠ΄Π΅ΠΌ постСпСнно ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ обучСния Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΌΠΈΠ½ΠΈ-Π½Π°Π±ΠΎΡ€Π΅ (mini-batch), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ измСняСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ скорости обучСния. Наша Ρ†Π΅Π»ΡŒ – Π½Π°ΠΉΡ‚ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ обучСния, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΡƒΡŽ сСти быстрСС ΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ. Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ обучСния ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ максимальной ΠΊΡ€ΡƒΡ‚ΠΈΠ·Π½Ρ‹ ΠΊΡ€ΠΈΠ²ΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‚ΡΡ быстрСС. Π’ΠΎΡ‡ΠΊΠΈ экстрСмума (ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΈ максимум) ΠΈ плоскиС участки ΠΊΡ€ΠΈΠ²ΠΎΠΉ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠΌ скоростям обучСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ сСти ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π² этих Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… Π½Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‚ΡΡ.

learn = cnn_learner(data, resnet34, metrics=accuracy)
lr_min, lr_steep = learn.lr_find()
ΠšΡ€ΠΈΠ²Π°Ρ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ

Π’ нашСм случаС, максимальная ΠΊΡ€ΡƒΡ‚ΠΈΠ·Π½Π° ΠΊΡ€ΠΈΠ²ΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ достигаСтся ΠΏΡ€ΠΈ скорости обучСния, Ρ€Π°Π²Π½ΠΎΠΉ 0.005. ИмСнно это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для дальнСйшСго обучСния.

learn.fine_tune(2, base_lr=5e-3)

ПослС обучСния ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° протяТСнии 3 эпох ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ 0.697, Ρ‡Ρ‚ΠΎ являСтся ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с 0.694, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ скорости обучСния, установлСнной ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ДискриминационныС скорости обучСния

ПослС обучСния всСх слоСв Π½Π΅ΠΉΡ€ΠΎΠ½Π½ΠΎΠΉ сСти Π½Π°ΠΌ придСтся снова ΠΏΠ΅Ρ€Π΅ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ обучСния, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ послС обучСния Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… (batches) ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ обучаСтся наша ΡΠ΅Ρ‚ΡŒ, сниТаСтся, ΠΈ с высокой ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ обучСния ΠΌΡ‹ рискуСм "ΠΏΠ΅Ρ€Π΅ΠΏΡ€Ρ‹Π³Π½ΡƒΡ‚ΡŒ" ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ обучСния Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ сниТСна.

Когда ΠΌΡ‹ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΊΡ€ΠΈΠ²ΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ послС Ρ‚Ρ€Π΅Ρ… эпох обучСния, ΠΌΡ‹ смоТСм ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ выглядит ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ вСса Π½Π΅ΠΉΡ€ΠΎΠ½Π½ΠΎΠΉ сСти большС Π½Π΅ случайныС.

ΠšΡ€ΠΈΠ²Π°Ρ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ послС Ρ‚Ρ€Π΅Ρ… эпох обучСния

ΠœΡ‹ Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅ΠΌ особого внимания Π½Π° Ρ€Π΅Π·ΠΊΠΎΠ΅ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ вСса ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚ случайных ΠΊ Ρ‚Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ. Π€ΠΎΡ€ΠΌΠ° ΠΊΡ€ΠΈΠ²ΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ выглядит плоской. Для Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ обучСния ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π±Ρ€Π°Ρ‚ΡŒ значСния скоростСй ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ€Π΅Π·ΠΊΠΎΠ³ΠΎ падСния Π΄ΠΎ Ρ‚ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ снова Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ расти.

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, слои, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΏΡ€Π΅Π΄ΠΎΠ±ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΡƒΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ особого обучСния. Однако Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠ΅ слои, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Π·Π° распознаваниС слоТных Ρ„ΠΎΡ€ΠΌ, спСцифичных для нашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ прСимущСства ΠΎΡ‚ Π±ΠΎΠ»Π΅Π΅ высоких скоростСй обучСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ мСньшиС скорости обучСния для ΠΏΠ΅Ρ€Π²Ρ‹Ρ… слоСв ΠΈ большиС скорости для послСдних слоСв, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΈΠΌ автоматичСски ΠΏΠΎΠ΄ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒΡΡ быстрСС.

learn.fit_one_cycle(6, lr_max=slice(1e-7, 1e-3))

ΠœΡ‹ ясно Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ наша ΡΠ΅Ρ‚ΡŒ добиваСтся прогрСсса Π² ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ. Однако Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠ±ΡƒΡ‡ΠΈΡ‚ΡŒ модСль. Π’Ρ‹Π²ΠΎΠ΄ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… ΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΠΎΡ‚Π΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π½Π°ΠΌ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ.

Π’Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ ΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ большС практичСски Π½Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‚ΡΡ, хотя Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ всС Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡŒΡΡ. Если ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅, ΠΌΡ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠΌ Ρ€Π°Π·Ρ€Ρ‹Π² ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΌΠΈ ΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ потСрями, Π° это Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΎΠ±ΡƒΡ‡ΠΈΠ»ΠΈ Π½Π°ΡˆΡƒ модСль. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅, Ссли ΠΌΡ‹ сСйчас остановим ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡˆΠ°Π³Ρƒ – ΠΎΡ†Π΅Π½ΠΊΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ.

ΠžΡ†Π΅Π½ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ

На ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ шагС ΠΌΡ‹ сумСли Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Π’ΠΎΠΏ-1 точности 70.4% Π½Π° Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Если ΠΌΡ‹ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ Π³Ρ€Π°Ρ„ΠΈΠΊ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ точности, ΠΌΡ‹ смоТСм ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½Π° ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ΡΡ с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ эпохой обучСния.

Ввалидационная Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π’ΠΎΠΏ-1 Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ эпохС

ΠžΡ†Π΅Π½ΠΊΠ° Π½Π° Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…

Для Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ посмотрим Π½Π° прСдсказания Π½Π° Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ, насколько Π²Π΅Π»ΠΈΠΊΠΎ нашС смСщСниС (bias) ΠΎΡ‚ истинного Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

learn.show_results()
ΠžΡ†Π΅Π½ΠΊΠ° Π½Π° Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€Π΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π½Π° Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… выглядят Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ. Наша модСль Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ основныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ. Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅Π³ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΈ очисткой Π΄Π°Π½Π½Ρ‹Ρ….

ΠžΡ†Π΅Π½ΠΊΠ° Π½Π° тСстовом Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ тСстовыС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ модСль Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Π½ΠΈΡ….

test_img_data = ImageDataLoaders.from_csv(PATH, csv_fname=TEST_PATH,
                                 item_tfms=Resize(224), 
                                 num_workers=0)
learn.data = test_img_data
learn.validate()
learn.show_results()
ΠžΡ†Π΅Π½ΠΊΠ° Π½Π° тСстовых Π΄Π°Π½Π½Ρ‹Ρ…

ВСстовая Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π’ΠΎΠΏ-1 нашСй ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ€Π°Π²Π½Π° 70.4%. Она Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ классифицируСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½ΠΎ всС-Ρ‚Π°ΠΊΠΈ ΠΎΡ‡Π΅Π½ΡŒ Π±Π»ΠΈΠ·ΠΊΠ° ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π½Π° Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ Π½Π°Π±ΠΎΡ€Π΅.

Авторы исходной ΡΡ‚Π°Ρ‚ΡŒΠΈ "DeepFashion: Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ распознаваниС ΠΈ восстановлСниС с ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌΠΈ аннотациями", CVPR 2016 использовали Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π’ΠΎΠΏ-3 ΠΈ Π’ΠΎΠΏ-5 для этой ΠΎΡ†Π΅Π½ΠΊΠΈ.

DeepFashion: Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ распознаваниС ΠΈ восстановлСниС с ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌΠΈ аннотациями, CVPR 2016

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ наши Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ сравнимыми, я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Ρ‚Π΅ ΠΆΠ΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ.

# https://forums.fast.ai/t/return-top-k-accuracy/27658/3
# ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° PyTorch 1.7.1
def accuracy_topk(output, target, topk=(3,)):
    """Computes the accuracy for the specified values of k"""

    maxk = max(topk)
    batch_size = target.size(0)

    _, pred = output.topk(maxk, 1, True, True)
    pred = pred.t()
    correct = pred.eq(target.view(1, -1).expand_as(pred))

    res = []
    for k in topk:
        correct_k = correct[:k].contiguous().view(-1).float().sum(0, keepdim=True)
        res.append(correct_k.mul_(100.0 / batch_size))
    return res

output, target = learn.get_preds()

print(accuracy_topk(output=output, target=target))
print(accuracy_topk(output=output, target=target, topk=(5,)))

Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π’ΠΎΠΏ-3 нашСй ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ€Π°Π²Π½Π° 88.6%, Ρ‡Ρ‚ΠΎ Π½Π° 6% Π²Ρ‹ΡˆΠ΅ исходной точности, Π° Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π’ΠΎΠΏ-5 нашСй ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ€Π°Π²Π½Π° 94.1%, Ρ‡Ρ‚ΠΎ Π½Π° 4% Π²Ρ‹ΡˆΠ΅ исходной. Π­Ρ‚ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ нас ΡƒΠ΄ΠΈΠ²Π»ΡΡ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π°Π²Ρ‚ΠΎΡ€Ρ‹ исходной ΡΡ‚Π°Ρ‚ΡŒΠΈ использовали Π² качСствС Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ VGG16, ΠΌΠ΅Π½Π΅Π΅ ΠΌΠΎΡ‰Π½ΡƒΡŽ модСль, Ρ‡Π΅ΠΌ наша ResNet34.

ΠžΡ†Π΅Π½ΠΊΠ° Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…

НаконСц-Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ наша модСль Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΌΠΎΠΈΡ… изобраТСниях. Π― сняла 98 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ своих ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹ Π½Π° ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ смартфона. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ эти изобраТСния ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, смоТСт Π»ΠΈ модСль ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΡ… ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

test_dict = {}
size = 224,224
missclassified_list = []

reader = csv.DictReader(open(PATH + CUSTOM_DATASET_PATH))

for row in reader:
    test_dict[row["image_name"]] = row["category_name"]

for key, value in test_dict.items():
    predicted = learn.predict(PATH + key)[0]
    print("Predicted: ", predicted, "True: ", value)
    img=Image.open(PATH + key)
    img.thumbnail(size,Image.ANTIALIAS)
    display(img)
    if predicted != value:
        missclassified_list.append((predicted, value))

Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π’ΠΎΠΏ-1 Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π²Π½Π° 62.4%, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΆΠ΅ показатСля для Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… DeepFashion. Однако ΠΎΠ½Π° всС Π΅Ρ‰Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠ° для ΠΌΠΎΠ΄Π΅Π»ΠΈ классификации с 46 классами.

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… довольно сильно ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ Ρ‚Π΅Ρ…, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π»Π° ΠΎΠ±ΡƒΡ‡Π΅Π½Π° модСль. НапримСр, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ изобраТСния ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ изобраТСния Π² Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… DeepFashion ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, носящСго эту ΠΎΠ΄Π΅ΠΆΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹. ΠŸΠΎΡ‡Ρ‚ΠΈ всС ΡˆΡ‚Π°Π½Ρ‹ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π±Ρ‹Π»ΠΈ классифицированы ΠΊΠ°ΠΊ ΡˆΠΎΡ€Ρ‚Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… Π΄Π»ΠΈΠ½Ρƒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ чСловСчСского Ρ‚Π΅Π»Π°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, модСль усвоила основныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΈ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… областСй ΠΌΠΎΠ΄Ρ‹.

Как Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΎΠ±ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ модСль ΠΈΠ· Fastai Π² PyTorch

ПослС обучСния ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅ Π½Π° машинС для Π²Ρ‹Π²ΠΎΠ΄Π°, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ инсталляции Fastai. Для этого Π½Π°ΠΌ сначала потрСбуСтся ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ модСль ΠΈ Π΅Π΅ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ:

modelname = learn.model
modelname.cpu()
torch.save(modelname, 'stage-1_resnet34.pkl')

with open(PATH+CLASSES_PATH, 'w') as f:
    for item in data.vocab:
        f.write("%s\n" % item)

torch.save сохраняСт вСса ΠΏΡ€Π΅Π΄ΠΎΠ±ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Она ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ Python pickle для сСриализации. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ модСль Π½Π° PyTorch, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ вСса ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ модСль:

class ClassificationModel():
    
    def __init__(self):
        return
        
    def load(self, model_path, labels_path,  eval=False):
      
        self.model = torch.load(model_path)
        self.model = nn.Sequential(self.model)
        
        self.labels = open(labels_path, 'r').read().splitlines()
        
        if eval:
            print(model.eval())
        return
    
    def predict(self, image_path):
        
        device = torch.device("cpu")
        img = Image.open(image_path)
        
        test_transforms = transforms.Compose([transforms.Resize(224),
                                      transforms.ToTensor(),
                                      transforms.Normalize([0.485, 0.456, 0.406],
                                                           [0.229, 0.224, 0.225])
                                     ])
        
        image_tensor = test_transforms(img).float()
        image_tensor = image_tensor.unsqueeze_(0)
        inp = Variable(image_tensor)
        inp = inp.to(device)
        output = self.model(inp)
        index = output.data.cpu().numpy().argmax()
        return self.labels[index]

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π° этот Ρ€Π°Π· ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ изобраТСния, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ прСдсказаниС. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Fastai Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ трансформациях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ произвСсти, Π² learner'Π΅, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ запускаСм модСль Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Fastai, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сначала ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ изобраТСния.

ПослС этого ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ прСдсказания, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π°ΠΌΠΈ класс:

learner = ClassificationModel()
learner.load(MODEL_PATH, CLASSES_PATH)
learner.predict(DATA_PATH+"img-phone-jpg\IMG_2966.jpg")

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этом руководствС я ΠΏΠΎΠΊΠ°Π·Π°Π»Π°, ΠΊΠ°ΠΊ ΠΎΠ±ΡƒΡ‡ΠΈΡ‚ΡŒ модСль ResNet34 для распознавания Ρ‚ΠΈΠΏΠ° ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Fastai ΠΈ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… DeepFashion. ΠœΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡƒΡ‡ΠΈΡ‚ΡŒ модСль, которая ΠΏΡ€Π΅Π²Π·ΠΎΠΉΠ΄Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° 6% для точности Π’ΠΎΠΏ-3 ΠΈ Π½Π° 4% для точности Π’ΠΎΠΏ-5. ΠœΡ‹ запустили ΠΎΡ†Π΅Π½ΠΊΡƒ для ΠΌΠΎΠΈΡ… собствСнных ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ модСль классифицировала ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ссли Π½Π΅ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹, Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊ ΠΌΠ°ΡΡˆΡ‚Π°Π±Ρƒ (ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° "ΡˆΡ‚Π°Π½Ρ‹ ΠΈΠ»ΠΈ ΡˆΠΎΡ€Ρ‚Ρ‹"). ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΅Ρ‰Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ, Ссли ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ качСство Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

matyushkin
07 апрСля 2020

ВОП-15 ΠΊΠ½ΠΈΠ³ ΠΏΠΎ Python: ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° Π΄ΠΎ профСссионала

Книги ΠΏΠΎ Python (ΠΈ связанным с Π½ΠΈΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚Π΅ΠΌΠ°ΠΌ) Π½Π° русском языкС. Рас...
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста
16 ноября 2019

DeepFake-Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»: создаСм собствСнный Π΄ΠΈΠΏΡ„Π΅ΠΉΠΊ Π² DeepFaceLab

РассказываСм ΠΎ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ DeepFake ΠΈ шаг Π·Π° шагом учимся Π΄Π΅Π»Π°Ρ‚ΡŒ Π΄ΠΈΠΏΡ„Π΅ΠΉΠΊΠΈ Π² ...
admin
14 июля 2017

ПишСм свою Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒ: пошаговоС руководство

ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π³Π°ΠΉΠ΄ ΠΏΡ€ΠΎ Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΈΠ· ΠΊΠ°ΠΊΠΈΡ… элСмС...