Spjutspetsföretag vänder sig till artificiell intelligens och maskininlärning för att möta utmaningarna i den nya digitala affärstransformationseran.
Enligt Gartner:"87 procent av seniora företagsledare säger att digitalisering är en företagsprioritet och 79% av företagsstrateger säger att det återuppfinner deras verksamhet – skapar nya intäktsströmmar på nya sätt ".
Källa :Gartner, Speed Up Your Digital Business Transformation, 15 januari 2019
Men hittills har den digitala förändringen varit utmanande. Komplexiteten i verktygen, arkitekturen och miljön skapar hinder för att använda maskininlärning. Att använda SQL-baserad relationsdatahantering för att lagra och utföra datautforskning av bilder minskar barriärerna och låser upp fördelarna med maskininlärning.
Det här blogginlägget visar hur man använder populära open source-verktyg MariaDB Server, TensorFlow Python-biblioteket och Keras neurala nätverksbibliotek för att förenkla komplexiteten i att implementera maskininlärning. Att använda dessa tekniker kan hjälpa dig att påskynda din tid till marknad genom att effektivt komma åt, uppdatera, infoga, manipulera och modifiera data.
Machine Learning på relationsdatabaser
I centrum för den digitala affärstransformationen som möjliggörs av maskininlärning är teknologier som chatbots, rekommendationsmotorer, personlig kommunikation, intelligent annonsinriktning och bildklassificering.
Bildklassificering har ett brett utbud av användningsfall – från brottsbekämpning och militär, till detaljhandel och självkörande bilar. När den implementeras med maskininlärning kan bildklassificering ge affärsintelligens i realtid. Syftet med bildklassificering är att identifiera och skildra, som en unik grånivå (eller färg), de egenskaper som förekommer i en bild. De vanligaste verktygen för bildklassificering är TensorFlow och Keras.
TensorFlow är ett Python-bibliotek för snabb numerisk beräkning skapad och släppt av Google. MariaDB Server är en relationsdatabas med öppen källkod med ett SQL-gränssnitt för att komma åt och hantera data. Keras är ett neuralt nätverksbibliotek med öppen källkod skrivet i Python.
I det här inlägget kommer du att upptäcka hur du testar bildklassificering genom att möjliggöra interoperabilitet mellan TensorFlow och MariaDB Server. Det här inlägget använder Fashion MNIST-datauppsättningen som innehåller 70 000 gråskalebilder i 10 kategorier. Bilderna visar enskilda klädesplagg med låg upplösning (28 x 28 pixlar).
Att ladda och förbereda data till MariaDB Server är utanför omfattningen av detta inlägg. Följande tabeller har skapats och fyllts i i förväg med Fashion MNIST-datauppsättningen.
Bilder | Bildroll | Bildetikett |
CREATE TABLE tf_images ( img_label tinyint(4), img_vector blob, img_idx int(10) unsigned NOT NULL, img_blob blob, img_use 4) tinyint /> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 | CREATE TABLE img_use ( use_id tinyint(4) NOT NULL AUTO_INCREMENT, use_name varchar(10) NOT NULL, use_desc varchar(100) NOT NULL, PRIMARY KEY (use_id) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 | CREATE TABLE categories ( class_idx tinyint(4) NOT NULL, class_name char(20) DEFAULT NULL, PRIMARY KEY (class_idx) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
Datautforskning
Följande bibliotek används för att utföra grundläggande datautforskning med MariaDB Server:
- io Modulen tillhandahåller Pythons huvudfaciliteter för att hantera olika typer av I/O.
- Matplotlib är ett Python 2D-ritningsbibliotek för att producera en mängd olika grafer över plattformar.
- Pandas erbjuder datastrukturer och operationer för att manipulera numeriska tabeller och tidsserier.
- pymysql Paketet innehåller ett rent Python-klientbibliotek för att komma åt MariaDB Server.
Låt oss börja med att ansluta till databasservern via Python:
import io import matplotlib.pyplot as plt import matplotlib.image as mpimg import pandas as pd import pymysql as MariaDB %matplotlib inline conn = MariaDB.connect( host = '127.0.0.1' , port = 3306 , user = 'mdb' , passwd = 'letmein' , db = 'ml' , charset = 'utf8') cur = conn.cursor()
När de är anslutna till MariaDB-servern kan bilderna i databasen lätt nås och hanteras. Alla bilder som används för att träna och testa modellen lagras i en enda tabell (tf_images). Hur bilden kommer att användas definieras i bildanvändningstabellen (img_use). I det här fallet har bordet bara två tupler, träning och testning:
sql="SELECT use_name AS 'Image Role' , use_desc AS 'Description' FROM img_use" display( pd.read_sql(sql,conn) )
Bildroll | Beskrivning |
Utbildning | Bilden används för att träna modellen |
Testar | Bilden används för att testa modellen |
Att kartlägga målattribut till bildobjekt i en datauppsättning kallas märkning. Etikettdefinitionen varierar från applikation till applikation, och det finns knappast en universell definition av vad en "korrekt" etikett är för en bild. Att använda en relationsdatabas förenklar märkningsprocessen och ger ett sätt att gå från grova till finkorniga etiketter.
I det här exemplet, med hjälp av tabellen "kategorier", har en bild bara en etikett (grov) som visas nedan:
sql="SELECT class_name AS 'Class Name' FROM categories" display( pd.read_sql(sql,conn) )
Klassnamn | |
0 | T-shirt/tröja |
1 | Byxa |
2 | Tröja |
3 | Klänning |
4 | rock |
5 | Sandal |
6 | Tröja |
7 | Sneaker |
8 | Väska |
9 | Stövel |
bilderna Tabellen innehåller alla bilder som ska användas för träning och testning. Varje bild har en unik identifierare, en etikett och om den används för att träna eller testa modellen. Bilderna lagras i sitt ursprungliga PNG-format och som förbehandlade flyttals-tensorer. En enkel inre koppling på denna tabell kan utföras för att visa bildrepresentationerna (vektor- eller png-format), dess etikett och den avsedda användningen.
sql="SELECT cn.class_name AS 'Class Name' , iu.use_name AS 'Image Use' , img_vector AS 'Vector Representation' , img_blob AS 'Image PNG' FROM tf_images AS ti INNER JOIN categories AS cn ON ti.img_label = cn.class_idx INNER JOIN img_use AS iu ON ti.img_use = iu.use_id LIMIT 5" display( pd.read_sql(sql,conn) )
Klassnamn | Bildanvändning | Vektorrepresentation | Bild PNG |
Stövel | Träning | b’\x80\x02cnumpy.core.multiarray\n_reconstruct... | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
T-shirt/tröja | Träning | b’\x80\x02cnumpy.core.multiarray\n_reconstruct... | b”\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
T-shirt/tröja | Träning | b’\x80\x02cnumpy.core.multiarray\n_reconstruct... | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
Klänning | Träning | b”\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
T-shirt/tröja | Träning | b’\x80\x02cnumpy.core.multiarray\n_reconstruct... | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
Att använda SQL-satser gör datautforskningsprocessen enkel. SQL-satsen nedan visar till exempel bildfördelningen efter bildetikett.
sql="SELECT class_name AS 'Image Label' \ , COUNT(CASE WHEN img_use = 1 THEN img_label END) AS 'Training Images'\ , COUNT(CASE WHEN img_use = 2 THEN img_label END) AS 'Testing Images'\ FROM tf_images INNER JOIN categories ON class_idx = img_label \ GROUP BY class_name" df = pd.read_sql(sql,conn) display (df) ax = df.plot.bar(rot=0)
Bildetikett | Träningsbilder | Testa bilder | |
0 | Stövel | 6000 | 1000 |
1 | Väska | 6000 | 1000 |
2 | rock | 6000 | 1000 |
3 | Klänning | 6000 | 1000 |
4 | Tröja | 6000 | 1000 |
5 | Sandal | 6000 | 1000 |
6 | Tröja | 6000 | 1000 |
7 | Sneaker | 6000 | 1000 |
8 | T-shirt/tröja | 6000 | 1000 |
9 | Byxa | 6000 | 1000 |
Det finns 6 000 bilder för varje etikett i träningssetet och 1 000 bilder för varje etikett i testsetet. Det finns totalt 60 000 bilder i träningssetet och totalt 10 000 bilder i testsetet.
Enskilda klädesplagg lagras som lågupplösta bilder. Eftersom databasen kan lagra dessa bilder effektivt som binära stora objekt (BLOB) är det mycket enkelt att hämta en bild med SQL, som visas nedan:
sql="SELECT img_blob \ FROM tf_images INNER JOIN img_use ON use_id = img_use \ WHERE use_name = 'Testing' and img_idx = 0" cur.execute(sql) data = cur.fetchone() file_like=io.BytesIO(data[0]) img = mpimg.imread(file_like) plt.imshow(img)
ovan:bild från fashion_mnist dataset
Denna första del av bloggserien har visat hur en relationsdatabas kan användas för att lagra och utföra datautforskning av bilder med enkla SQL-satser. Del 2 kommer att visa hur man formaterar data till de datastrukturer som behövs av TensorFlow, och sedan hur man tränar modellen, utför förutsägelser (dvs. identifierar bilder) och lagrar dessa förutsägelser tillbaka i databasen för vidare analys eller användning.
MIT-licens
Uppsättningen Fashion MNIST (fashion_mnist) som utnyttjas av den här bloggen är licensierad under MIT-licensen.
MIT-licensen (MIT) Copyright © 2017 Zalando SE, https://tech.zalando.com
Tillstånd ges härmed kostnadsfritt till varje person som skaffar en kopia av denna programvara och tillhörande dokumentationsfiler ("Programvaran") att handla med programvaran utan begränsningar, inklusive utan begränsning rätten att använda, kopiera, modifiera, slå samman, publicera, distribuera, underlicensiera och/eller sälja kopior av programvaran och att tillåta personer till vilka programvaran tillhandahålls att göra det, under förutsättning att följande villkor är uppfyllda:
Ovanstående copyrightmeddelande och detta tillståndsmeddelande ska inkluderas i alla kopior eller väsentliga delar av programvaran.
PROGRAMVARAN TILLHANDAHÅLLS "I BEFINTLIGT SKICK", UTAN GARANTIER AV NÅGOT SLAG, UTTRYCKTA ELLER UNDERFÖRSTÅDDA, INKLUSIVE MEN INTE BEGRÄNSAT TILL GARANTIER FÖR SÄLJBARHET, LÄMPLIGHET FÖR ETT SÄRSKILT ÄNDAMÅL OCH INTRÄNGNING. UNDER INGA OMSTÄNDIGHETER SKALL FÖRFATTARE ELLER UPPHOVSRÄTTSinnehavare VARA ANSVARIGA FÖR NÅGOT ANSVAR, SKADA ELLER ANNAT ANSVAR, VARKEN I EN ANVÄNDNING AV KONTRAKT, TORT ELLER ANNAT SÄTT, SOM UPPSTÅR FRÅN, UR ELLER I SAMBAND MED ANVÄNDNINGEN ELLER MJUKVARAN. PROGRAMVARA.
Referenser
Konvertera egen bild till MNIST:s bild
matplotlib:Bildhandledning
5 sätt AI förvandlar kundupplevelsen
Digitalisering uppfinner verksamheten på nytt
Vad är bildklassificering?
Introduktion till Python Deep Learning Library TensorFlow