Преводът на екранни дизайни в HTML/CSS маркиране е трудоемка задача за уеб разработчиците, която следва ясни правила, но се нуждае от много прецизност. Изглежда, че е добро приложение за машинно обучение в бъдеще.

Статията



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

Увеличаване на данните

За обучението имам нужда от много изображения на екранни дизайни със съдържание, отговарящо на нуждите на задачите за класификация. Затова реших да генерирам данните с някои скриптове на Python, като използвам библиотеката „Beautiful Soup“ за анализ на HTML и конструиране на части от маркирането и библиотеката „cssutils“ за анализ на CSS файловете. Всички дизайни са създадени с „Bootstrap“ („https://getbootstrap.com/“) и комбинират произволно избрани изображения и сляп текст с някои цветове и основно маркиране. Мрежовата система на Bootstrap беше използвана за генериране на оформления с различен брой колони.

Инструментът на командния ред „wkhtmltoimage“ („https://wkhtmltopdf.org/“) беше използван за конвертиране на HTML-файловете в PNG-файлове. Разделителната способност на екрана беше зададена на 1200px на 1200px. Файловете могат да бъдат изтеглени от https://www.floydhub.com/mosch/datasets/pix2html.

Един набор от изображения се състои от 540 изображения - половината от тях с ярък фон, а другата половина с тъмен.

Вторият набор има 450 изображения - половината от тях с една колона, а останалите с две.

Обучение на класификаторите

Обучението беше проведено с „Jupyter Notebooks“ на „Floydhub“ („https://www.floydhub.com“). Невронните мрежи са изградени и оптимизирани с „Keras“ („https://keras.io/“).

Found 450 images belonging to 2 classes.
Found 90 images belonging to 2 classes.

За обучение и тестване данните бяха разделени на набор от данни за обучение и тест и всяко изображение се преоразмерява до 300x300 пиксела, за да се спести време за изчисление. Използван е размер на партида от 10.

Моделът се състои от няколко слоя „2D-Convolutional“ и „MaxPooling“, последвани от слой „Dense“ и единица „Sigmoid“ в края, за да се предвидят вероятностите за двоичната класификация.

Открийте цвета на фона

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

Обучението и тестването за някои епохи показаха, че след около 15 стъпки моделът беше перфектен в откриването на цвета на фона. Нека да разгледаме тренировъчните криви за точността на класификатора и функцията на загубата.

Открийте броя на колоните в оформленията

Използвайки втория набор от генерирани изображения, се опитах да класифицирам по броя на колоните от необработените пиксели.

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