Тази публикация първоначално беше публикувана в блога на Shoprunner Engineering тук, не се колебайте да я проверите и в някои от другите дейности, които нашите екипи вършат.

Тази рокля не съществува

Нашият екип на ShopRunner Data Science позволява на всички членове да имат тримесечна хак седмица. Важно е екипите за наука за данни да продължат да правят иновации, така че веднъж на тримесечие на членовете на екипа е позволено да прекарат една седмица в работа по по-спекулативни проекти по техен избор. За моята хакерска седмица за третото тримесечие на 2019 г. реших да създам серия от модели генератори, за да се опитам да създам фалшиви продукти. Генериращите модели са модели, които обикновено се обучават да създават реалистични изображения или текст въз основа на примери от реалния свят. Този проект може да изглежда доста необичаен, което е, но общата ми идея е, че ако можем да създадем силни модели генератори, които могат да уловят разнообразието на нашия продуктов каталог, тогава можем да използваме тези генератори, за да увеличим нискочестотните класове в нашия каталог за други дълбоки учебни проекти като таксономична класификация или маркиране на атрибути.

Двете мрежи, които реших да използвам, бяха малък модел на параметрите „GPT-2 на OpenAI“ 117M за генериране на текст и „StyleGAN на Nvidia“ за генериране на изображения. След това ги настроих фино към вътрешни набори от данни на ShopRunner. И за двата модела открих, че използването на оригиналните реализации на Tensorflow е най-добрият път напред, тъй като портовете към други рамки или нямаха функции, от които се нуждаех, или не бяха толкова добре изградени.

И двата модела бяха обучени на графична карта Nvidia 2080 TI.

GPT-2

През февруари 2019 г. OpenAI обяви най-новия си езиков модел GPT-2. GPT-2 е обучен на 40 GB интернет текст, но OpenAI ограничи пускането на модела до много по-малки версии поради опасения за злонамерено поведение. Голяма част от изграждането на този висококачествен набор от данни беше използването на по-висококачествен Reddit. В своето необработено състояние GPT-2 е отличен в генерирането на реалистично звучащ текст, но текстът има тенденция да попада или в диалог в стил reddit, или в описание в стил на wikipedia. Така че, за да извлечем максимална полза от GPT-2 като генератор за фалшиви продукти, трябва да го настроим за нашия конкретен случай на употреба, в този случай мода.

Репото, предоставено от nshepperd за фина настройка, предоставя серия от скриптове и инструкции за фина настройка. За да извършим фина настройка, наистина трябва да форматираме текстов набор от данни за консумация от GPT-2. За това в крайна сметка написах 100 000 описания на продукти в техния собствен ред в .txt файл със специфичен за GPT-2 <endoftext> токен, добавен към края, така че GPT-2 да научи как да завърши описанията на продуктите и да се научи как да ги структурира по по-реалистичен начин.

GPT-2 се обучи сравнително бързо, давайки добри резултати след 15K партиди/стъпки, които отнеха няколко часа.

ShopRunner GPT-2 (SR GPT-2)

Ние фино настроихме GPT-2 на ShopRunner данни за 15K стъпки, водещи до това, което наричаме SR GPT-2. След фина настройка SR GPT-2 е в състояние да генерира доста реалистично изглеждащи описания на продукти, включително прекъсвания на редове и форматиране. Те също са доста забавни за четене.

======================================== SAMPLE 1 ========================================
WATERDOG | PINK HALSTON COLLECTION. HALSTON'S HOODED SILK FIT IS SO AWESOME HONG KONG\'s black wool-blend hooded cowl jacket is handmade from lightweight wool sourced from two countries located in the Arctic Circle and Wye Hydroelectric Power Supply.
- HALSTON WOOL CLIMB JERRY WOOL FIT 
- Fabric: 90% wool, 10% wool crepe; 12% viscose, 8% polyester and 5% nylon 
- Washable, dry clean recommended 
- Imported
SKU: HU18-17FBC
FABRIC & CARE
Machine wash cold with similar colors
Warm down with white
Wash in cold water and hang dry  
======================================== SAMPLE 2 ========================================
Wool-Cotton Cropped T-Shirt Dress Dress with Boho Floral Print - Black This T-Shirt Dress features a Boho Floral printed front, a short sleeve hemline, and an asymmetrical ruffled hemline. A limited edition piece from our New York Fashion Show capsule.
New York Fashion is celebrating the 20th anniversary of their popular T-Shirt Dress in 2011. The T-Shirt Dress is a loose-fitting bodice cut out cut in black silk crepe de chine with a fitted waistband. The dress has a V neckline, long sleeves, two front split pockets, and a draped waist.
100% Silk
Dry Clean Only
Imported
SI38S-F18
Size & Fit
Model is wearing a size 6
Model Measurements: Height: 5ft 9in; Bust-Chest: 33in; Waist: 23.6in; Hips: 34.5in
About SI38S-F18
Sieviast designer and renowned expert James Simone launched his versatile collection of womens ready-to-wear and accessories in 2008. The label\'s garments have been named the year\'s top fashion showpieces, and the lines are sure to become a summer staple.

Но с помощта на GPT-2 можем също да генерираме контекстно базирани примери.

Ето пример, генериран с контекста „червена асиметрична рокля без ръкави

Details
This asymmetric fit-and-flare fit is cut in a slim fit. Cut for a flattering, relaxed fit.
- Round neckline. 
- Sleeveless. 
- One center front, two center back. 
- 100% polyester. 
- Machine wash. 
- Imported. 
- Model is 5\'10""/178 cm and has a 32"" bust. She wears a US size 2.

Този пример изглежда доста реалистичен и разумен. Едно нещо, за което се зарадвах, е, че освен генерирането на реалистично изглеждащо описание е, че думи като „асиметричен“ и „без ръкави“, които бяха използвани във фразата за въвеждане, също се появяват в генерираното описание.

По-малко сериозна бележка, понякога с по-малко модно звучащ контекст все още можем да прокараме част от старото GPT-2 обучение и структура.

За контекст „месна рокля“, вдъхновена от „Лейди Гага“

Със същия контекст месна рокля по-долу са два генерирани примера. Когато SR GPT-2 генерира извадка, той взема под внимание думи с най-голяма вероятност да следват дадения контекст. В процеса обаче има известна произволност, така че резултатите могат да излязат по съвсем различен начин. Първият пример генерира сравнително разумно изглеждащо описание на продукта. Вторият SR GPT-2 се връща малко към обучението с по-голяма дефиниция на GPT-2

Meat dress: our Italian twist, crafted of a crepe fabric with a stretchy, crinkle finish. Features hand-woven details, an embroidered floral pattern throughout.
- Adjustable, pull-on, belt 
- Side slit 
- Adjustable, belt with cut from a relaxed fit 
- Fabric has been softened by hand washing 
- 95% rayon, 5% spandex blend; lining: 100% polyester crepe de chine 
- Washable 
- Imported

dress made of meat, bone, and vegetable gabardine. In honor of the American Heart Foundation.

StyleGAN

Генеративните състезателни мрежи (GAN) са интересна област на задълбочено обучение, където процесът на обучение включва две мрежи - генератор и дискриминатор. Моделът на генератора започва сам да създава изображения, започва от произволен шум, докато дискриминаторът дава обратна връзка, като разглежда примери за обучение и изход на генератора и прогнозира дали те са „истински“ или „фалшиви“. С течение на времето тази обратна връзка помага на генератора да създава по-реалистични изображения.

StyleGAN е модел, пуснат от Nvidia към края на 2018 г. Това е подобрение спрямо предишен модел на Nvidia, наречен ProGAN. ProGAN беше обучен да генерира висококачествени изображения 1024x1024 и го направи чрез прилагане на прогресивен цикъл на обучение, при който започва обучение на изображения с ниска разделителна способност (4x4) и увеличава тази разделителна способност с течение на времето чрез добавяне на допълнителни слоеве. Обучението на изображенията с ниска разделителна способност спомогна за по-бързото обучение и повиши качеството на крайните изображения, тъй като мрежите успяха да научат важни характеристики от по-ниско ниво. ProGAN обаче има ограничена способност да контролира генерираните изображения.

StyleGAN подобрява ProGAN, като дава възможност за контрол на „стила“ на изходите, като позволява на потребителите да манипулират латентните пространствени вектори на генерирано изображение. Всяко изображение, което StyleGAN генерира, се представя от вектор, който съществува в латентното пространство на StyleGAN. Така че, ако промените този вектор, можете да коригирате характеристиките на изображението в латентното пространство на StyleGAN, за да създадете ново изображение с желани характеристики.

Това е само кратко описание на StyleGAN за повече информация вижте хартия или други бележки на online.

ShopRunner StyleGAN (SR StyleGAN)

В крайна сметка тренирах SR StyleGAN за около 4 дни и генерирах около 2 милиона 512x512 изображения в процеса. Като отправна точка за инициализация на теглото всъщност използвах друг аниме обучен StyleGAN. Използвах това аниме StyleGAN като отправна точка, защото оригиналният Nvidia StyleGAN беше обучен да генерира 1024x1024 изображения, които са страхотни, но и по-трудни за работа, защото изискват повече изчислителна огнева мощ. Анимето StyleGAN за сравнение е обучено да генерира 512x512 изображения, така че е по-управляемо.

Наборът от данни за SR StyleGAN беше около 9000 изображения на продукти предимно с рокли, които съкратих на базата на няколко критерия. Стъпка 1 Направих с няколко реда код, но последните три стъпки бяха ръчни.

  1. Размер: Изхвърлих изображения с ширина или височина под 300. Ако оставите изображения с ниско качество в набора от данни, ще получите окончателно генерирани изображения с пикселиран вид.
  2. композиция: за простота се опитах да запазя изображения, където моделът/продуктът е разположен в центъра на изображението
  3. фон: премахнати прекалено сложни фонове, тъй като най-вече би означавало много допълнителни усилия от страна на модела, за да започне да ги генерира добре
  4. премахнати снимки, които не са продукти: определени изображения бяха или празни изображения на контейнери, или увеличени снимки на шарка/плат. Оставянето на снимки като тези в набора от данни, който намерих, дава на StyleGAN лесен начин за измама и генериране на „реалистично“ изглеждащи изображения, за да заблуди дискриминатора. Това обаче не е най-желателното поведение, така че направих всичко възможно да ги премахна.

Генериране на примери с ниска честота

Сега, след като преминахме през някои от подробностите за обучението на SR StyleGAN, можем да започнем да говорим за това как да генерираме тези нискочестотни продукти. В следващото видео виждате няколко секунди, в които се генерират гащеризони, въпреки че този набор от данни беше предимно рокли. Така че за тази хакерска седмица използвах гащеризони като пример за нискочестотен клас.

Един бърз метод за генериране на допълнителни проби от гащеризони би бил да генерираме безусловно голям брой изображения на SR StyleGAN и да търсим в тях, за да намерим примери за нискочестотния клас, който ни интересува.

Ето няколко примера, които ръчно извадих от няколкостотин генерирани StyleGAN изображения. Това е добре? НО ако можем да разберем къде точно съществуват гащеризони в латентното пространство на SR StyleGAN, бихме могли да ги генерираме, както сметнем за добре.

Смесване на стилове със SR StyleGAN

Всяко изображение е представено от характерен вектор в латентното пространство на SR StyleGAN. Така че, ако комбинираме различни вектори заедно, можем да започнем да получаваме „смесване на стилове“. В двата комплекта видеоклипове по-долу това, което виждаме, горното дясно изображение се нанася върху долното ляво изображение. Получената смес е в долното дясно изображение, което трябва да бъде доминирано от характеристиките на горното дясно изображение. И в двата видеоклипа виждате характеристиките на горното дясно изображение да се изместват в отговор на промените в долното ляво изображение.

Това е готино, някак си ни дава начин да комбинираме две изображения чрез комбиниране на техните характерни вектори в латентното пространство на SR StyleGAN.

Комбиниране на генератори на изображения и текст?

Тъй като целта беше да се генерират реалистично изглеждащи фалшиви продукти, ето два примера за генерирани изображения с контекстно генериран текст. Към момента текстовият контекст се генерира ръчно, но бъдещ проект може да бъде изграждането на модел за надписи или просто използване на тагове, генерирани от вътрешни атрибутни и таксономични модели, върху които екипът работи. Тези генерирани тагове могат да се използват като нещо като заместител на заглавието на продукта. Например потенциални атрибути на следната рокля могат да бъдат „червена асиметрична рокля без ръкави“ и могат да бъдат въведени в GPT-2, за да се получат контекстно генерирани описания на продуктите.

Контекст за SR GPT-2: червена асиметрична рокля без ръкави

Details
This asymmetric fit-and-flare fit is cut in a slim fit. Cut for a flattering, relaxed fit.
- Round neckline. 
- Sleeveless. 
- One center front, two center back. 
- 100% polyester. 
- Machine wash. 
- Imported. 
- Model is 5\'10""/178 cm and has a 32"" bust. She wears a US size 2.

Втори пример за използване на гащеризон, генериран от SR StyleGAN с потенциални тагове, които са „черен гащеризон с къс ръкав“, което изглежда като разумно описание или скучно заглавие.

SR GPT-2 контекст: черен гащеризон с къс ръкав.

A loose, fluid silhouette lends a comfortable wear to any look. The buttonless back features a keyhole on the chest.
Material and Care
Material information: 100% Cotton, Lining: 100% Viscose, Lining: 100% Polyester

След това като забавно продължение подадох тези два примера чрез нашата вътрешна таксономична услуга за класификация, която използва изображения и въвеждане на текст, и открих, че таксономичната услуга успешно категоризира двете изображения като „женска рокля“ и „гащеризон“.

Опаковане на нещата

В хода на тази хакерска седмица прекарах много време в обучение на модели и разглеждане на генерирани изображения и текстови резултати. Все още смятам, че макар и трудни за използване, тези модели в стил генератор потенциално биха могли да бъдат много полезни за добавяне на интересна бизнес стойност. Първоначално споменах неща като увеличаване на синтетични данни за нискочестотни класове, но други идеи, дошли от екипа, биха могли да позволят на потребителите да генерират елементи и да манипулират елементите, ако можем да разберем как успешно да локализираме и манипулираме различни функции в латентното пространство на GAN. Ако потребителите могат да генерират артикули, които биха искали, тогава можем да направим по-стандартни визуални търсения на нашия каталог и така нататък.

Относно забележките към моделите.

GPT-2 изглежда добре и се учи бързо, потенциално също така се пренастройва бързо... чрез подаване на подходящ контекст може да генерира разумен текст. Това, което използваме като контекст, всъщност е въпросът. Мислите биха били модел за надписи, базиран на реално изображение или изображение на GAN. По-прост начин би бил просто да подадете всички налични атрибути и таксономична информация като обикновен текст и да видите как става.

StyleGAN е прилично обучен и за да постигна по-добри резултати, вероятно ще трябва да го обуча от нулата или поне от много по-ранна точка в обучението му. Умишлено накарах StyleGAN да стартира в момент, в който генерираше доста големи изображения. всичко това, докато използвате тези аниме тежести.

Нещо, с което експериментирах, но не намерих голям успех, беше картографирането на изображения във и извън латентното пространство на StyleGAN. Общата идея е да се използва предварително обучена мрежа, за да се научи да намира най-близкото приближение на изображение в латентното пространство на StyleGAN, като генерира StyleGAN вектори и сравнява колко близо е изображението до оригинала. Ако можем успешно да картографираме елементи в латентното пространство на StyleGAN, тогава можем да комбинираме тези вектори, за да имаме малко повече контрол върху това, което модифицираме. Например можем да картографираме куп гащеризони в латентното пространство на StyleGAN и да смесим тези гащеризони заедно, за да направим нови мостри. Друга свързана стъпка е намирането къде съществуват определени атрибути или модели в латентното пространство, тогава бихме могли потенциално

За пълно обучение Nvidia изброява време за обучение от 42 дни с един GPU. Вероятно бихте могли да постигнете добри резултати за цяла седмица или две тренировки, тъй като други хора, които са опитали да тренират от нулата, съобщават, че последните няколко седмици всъщност са просто за изчистване на незначителни подробности.

Ако в крайна сметка продължа с тази идея за хак седмица, много бъдеща работа вероятно ще бъде около манипулирането на изходите на SR StyleGAN и локализирането къде се намират неща като дължина на рокля/ръкав или цветове и шарки, за да се даде възможност за по-фин контрол върху манипулирането на различни аспекти на генерираните изображения.