π€ ΠΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΎΠ΄Π΅ΠΆΠ΄Ρ ΠΈΠ· Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ DeepFashion Ρ ΠΏΠΎΠΌΠΎΡΡΡ Fastai
Π‘ΡΠ°ΡΡΡ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΌΡΠ»ΡΡΠΈΠΊΠ»Π°ΡΡΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ResNet34 Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ PyTorch ΠΈ Fastai. ΠΠ²ΡΠΎΡ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Ρ ΡΠ΅Π²ΠΈΠ·ΠΈΠΈ Π·ΠΈΠΌΠ½Π΅ΠΉ ΠΎΠ΄Π΅ΠΆΠ΄Ρ ΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅Ρ Π½Π΅ΠΉΡΠΎΡΠ΅ΡΡΠΌΠΈ.
ΠΠ΅ΡΠ²ΠΎΠ΅ ΡΠ½Π²Π°ΡΡ β ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΡΠΉ Π΄Π΅Π½Ρ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π±ΡΠ°ΡΡ ΡΠ²ΠΎΠΈ Π·ΠΈΠΌΠ½ΠΈΠ΅ Π²Π΅ΡΠΈ. ΠΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎ Π±ΡΠ»ΠΎ Ρ ΠΌΠ΅Π½Ρ Π½Π° ΡΠΌΠ΅, ΠΊΠΎΠ³Π΄Π° Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΠ»Π° ΠΊ ΡΠ²ΠΎΠ΅ΠΌΡ Π³Π°ΡΠ΄Π΅ΡΠΎΠ±Ρ ΠΌΠ΅ΡΡΡ Π½Π°Π·Π°Π΄. ΠΠΎΠ½ΠΎΡΠΎΠ½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π½ΠΈΡ ΡΠ²ΠΈΡΠ΅ΡΠΎΠ², Π½ΠΎΡΠΊΠΎΠ² ΠΈ ΡΠ°ΡΡΠΎΠ² ΠΌΠ΅Π΄ΠΈΡΠ°ΡΠΈΠ²Π΅Π½ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΈΡΠΎΠ΄Π΅ ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΎΡΠΊΡΡΡΠΈΡΠΌ. ΠΡΠΎΠ΄Π΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Ρ ΠΌΠ΅Π½Ρ ΡΡΠΈ ΡΠΎΠ·ΠΎΠ²ΡΠ΅ Π±Π»ΡΠ·ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΡΠΈΠ»Ρ. ΠΡΠΎ ΠΎΡΠΊΡΡΡΠΈΠ΅ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ ΠΌΠ½Π΅ ΠΎΡΠΎΠ·Π½Π°ΡΡ, ΡΡΠΎ ΠΌΠ½Π΅ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉ Π·Π°ΠΏΠ°Ρ ΠΌΠΎΠ΄Π½ΡΡ Π²Π΅ΡΠ΅ΠΉ, ΠΏΠΎΠ²ΡΡΠΈΠ² ΠΈΡ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ ΠΈ ΡΠΎΠΊΡΠ°ΡΠΈΠ² ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΡΡΡ ΠΌΠΎΠΈΡ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠΎΠ² ΠΎΠ΄Π΅ΠΆΠ΄Ρ. ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΌΠΎΠ΅ΠΉ ΡΠ΅Π»ΡΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ²ΠΎΠ΅Π³ΠΎ Π³Π°ΡΠ΄Π΅ΡΠΎΠ±Π° Π² Π²ΠΈΠ΄Π΅ Π³ΡΠ°ΡΠ° ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠΎΠ² ΠΎΠ΄Π΅ΠΆΠ΄Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ ΡΠΈΠΏΡ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠΎΠ² (ΡΠ²ΠΈΡΠ΅Ρ, ΡΡΠ°Π½Ρ ΠΈ Ρ.ΠΏ.), ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΡ (ΡΠΊΠ°Π½Ρ, ΡΡΠΈΠ»Ρ, ΡΠ²Π΅Ρ ΠΈ Ρ.Π΄.) ΠΈ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ (ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠΎΡΠ΅ΡΠ°ΡΡ ΡΡΠΈ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠ±ΡΠ°Π·Π΅). Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π° Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ , Π° ΠΈΠΌΠ΅Π½Π½ΠΎ β ΠΊΠ°ΠΊ ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡ ΡΠΈΠΏ ΠΎΠ΄Π΅ΠΆΠ΄Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ°.
ΠΡΠ° ΡΡΠ°ΡΡΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°ΡΡΠ΅ΠΉ:
- ΠΠ°Π½Π½ΡΠ΅.
- ΠΠ±ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
- ΠΡΠ΅Π½ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ.
- ΠΠ°ΠΊ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΏΡΠ΅Π΄ΠΎΠ±ΡΡΠ΅Π½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ· Fastai Π² PyTorch.
- ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
Π₯ΠΎΡΡ Ρ Π³ΠΎΠ΄Π°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π° Π΄Π»Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Keras, Π½Π° ΡΡΠΎΡ ΡΠ°Π· Ρ ΡΠ΅ΡΠΈΠ»Π° Π΄Π°ΡΡ ΡΠ°Π½Ρ PyTorch ΠΈ Fastai. ΠΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π·Π΄Π΅ΡΡ.
ΠΠ°Π½Π½ΡΠ΅
Π§ΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊ ΠΊΠ°ΠΊΠΈΠΌ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠΌ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΡ ΠΌΠΎΠ΅Π³ΠΎ Π³Π°ΡΠ΄Π΅ΡΠΎΠ±Π°, ΠΌΠ½Π΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΎΠ±ΡΡΠ΅Π½Π½Π°Ρ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ, Π° Π΄Π»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½ΡΠΆΠ½Ρ Π΄Π°Π½Π½ΡΠ΅. Π ΡΡΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π° Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ 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% Π½Π° Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΎΠ½Π½ΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅ Π΄Π°Π½Π½ΡΡ . ΠΡΠ»ΠΈ ΠΌΡ Π²ΡΠ²Π΅Π΄Π΅ΠΌ Π³ΡΠ°ΡΠΈΠΊ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ, ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½Π° ΡΠ»ΡΡΡΠ°Π΅ΡΡΡ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΏΠΎΡ ΠΎΠΉ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ.
ΠΡΠ΅Π½ΠΊΠ° Π½Π° ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΎΡΠ½ΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΌΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π½Π° ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΎΡΠ½ΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎΠ±Ρ ΠΎΡΠ΅Π½ΠΈΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π΅Π»ΠΈΠΊΠΎ Π½Π°ΡΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ (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 Π΄Π»Ρ ΡΡΠΎΠΉ ΠΎΡΠ΅Π½ΠΊΠΈ.
Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π°ΡΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΡΠ°Π²Π½ΠΈΠΌΡΠΌΠΈ, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ΅ ΠΆΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ.
# 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. ΠΡ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ ΠΎΡΠ΅Π½ΠΊΡ Π΄Π»Ρ ΠΌΠΎΠΈΡ
ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡ, ΡΡΠΎ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π»Π° ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π½Π΅ ΡΡΠΈΡΠ°ΡΡ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΡ, ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΊ ΠΌΠ°ΡΡΡΠ°Π±Ρ (ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° "ΡΡΠ°Π½Ρ ΠΈΠ»ΠΈ ΡΠΎΡΡΡ"). ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΅ΡΠ΅ ΡΠ»ΡΡΡΠΈΡΡ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΎΡΠ½ΡΡ
ΠΌΠ΅ΡΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.