Gyakorlat – Adatok feltöltése
Most itt az ideje, hogy feltöltsük a gépi tanulási modell betanítása során használt képeket. A képek feltöltésének két módja van:
- A Custom Vision portálon válassza ki, töltse fel és címkézze fel a képeket.
- Egy olyan eszközben, mint a Jupyter Notebook, használja a Custom Vision SDK-ban található képeket.
Ha nagy mennyiségű adatot, képosztályt és címkét kell feltöltenie, gyorsabban használhatja a Custom Vision SDK-t. A következő szakaszokban ismertetett lehetőségek közül azonban választhat. Végezze el a képek adathalmazba való feltöltésének lépéseit az Ön számára legjobban megfelelő módon.
1. lehetőség: Képek feltöltése és címkézése a Custom Vision portálon
A képeket minden almappának külön-külön kell feltöltenie és címkéznie. Ebben a gyakorlatban előfordulhat, hogy a feltöltés sebességétől függően csak négy vagy öt almappában szeretne képeket feltölteni. Ne feledje, hogy egy gépi tanulási modul betanításakor több és változatosabb példa jobb eredményeket fog eredményezni.
Hozzon létre egy projektet a Custom Vision portálon:
Lépjen, https://www.customvision.ai/projects és jelentkezzen be. Válassza az Új projekt lehetőséget.
Az Új projekt létrehozása területen:
A Név mezőben adjon meg egy tetszőleges projektnevet.
Leírásként adja meg a modell rövid leírását.
Erőforráscsoport esetén válassza ki az Azure Portalon létrehozott erőforráscsoportot.
Projekttípusok esetén válassza a Besorolás lehetőséget.
Besorolási típusok esetén válassza a Többosztályos (egyetlen címke képenként) lehetőséget.
Tartományok esetén válassza az Általános lehetőséget.
Válassza a Create project (Projekt létrehozása) lehetőséget.
Megjegyzés:
Ha a modellt mobileszközön, TensorFlow.js-ben vagy IoT-eszközökön szeretné üzembe helyezni, akkor a Tartományokterületen válassza a kompakt modellbeállítást. Ezt a beállítást a projekt létrehozása után módosíthatja a beállításokban.
Képek és címkék hozzáadása madárfajokhoz:
A Custom Vision-projektben válassza a Képek hozzáadásalehetőséget.
A Megnyitás nézetben nyissa meg a birds-photo mappát, ahol kinyerte a képfájlokat az adathalmaz zip-fájljából.
Nyisson meg egy madárfaj mappát.
A Ctrl +A billentyűkombinációval jelölje ki a fajmappában lévő összes képet, majd válassza a Megnyitás lehetőséget.
A Képek feltöltése területen adjon meg egy leírást a Saját címkékben, hogy jelezze a képeken látható madarak faját.
Válassza ki a <darabszám> fájl feltöltése lehetőséget.
Ismételje meg az előző lépést, hogy feltöltse a fényképeket a letöltött adatkészlet minden madárfaj mappájába.
2. lehetőség: Képek feltöltése és címkézése a Python és a Custom Vision SDK használatával
A Custom Vision SDK a következő programozási nyelveken érhető el: Python, .NET, Node.js, Go és Java. Pythont fogunk használni. Ha még nincs telepítve a Python, javasoljuk, hogy egy Anaconda-telepítéssel szerezze be. Az Anaconda letöltésekor pythont kap.
Ha inkább a GitHubról szeretné letölteni a kódot, klónozhatja az adattárat a következő paranccsal:
git clone https://github.com/MicrosoftDocs/mslearn-cv-classify-bird-species.git
Az alábbi lépéseket követve hozza létre a virtuális környezetet, és illessze be a kódot a környezetbe:
Nyissa meg a választott IDE-t. Ezután futtassa a következő parancsot a csomag importálásához:
!pip install azure-cognitiveservices-vision-customvision
Importálja a szkript futtatásához szükséges csomagokat:
from azure.cognitiveservices.vision.customvision.training import CustomVisionTrainingClient from azure.cognitiveservices.vision.customvision.training.models import ImageFileCreateEntry from azure.cognitiveservices.vision.customvision.training.models import ImageFileCreateBatch from msrest.authentication import ApiKeyCredentials import numpy as np
Most használja az alábbi kódot a Custom Vision-projekt létrehozásához. A kód futtatása előtt cserélje le a
<endpoint>
helyőrzőket a<key>
Custom Vision-erőforrás értékeire.A Custom Vision-erőforrásértékek lekérése:
Az Azure Portalon nyissa meg a Custom Vision-erőforrást.
Az erőforrás menü Erőforrás-kezelés területén válassza a Kulcsok és végpont lehetőséget.
Másolja ki az értéket a Végpont mezőből. A kódban cserélje le a
<endpoint>
helyőrzőt erre az értékre.AZ 1. KULCS esetében válassza a másolás ikont a kulcs másolásához. A kódban cserélje le a
<key>
helyőrzőt erre az értékre.
A kód a következő példához hasonlóan fog kinézni:
ENDPOINT = "<endpoint>" # Replace with a valid key training_key = "<key>" credentials = ApiKeyCredentials(in_headers={"Training-key": training_key}) publish_iteration_name = "classifyBirdModel" trainer = CustomVisionTrainingClient(ENDPOINT, credentials) # Create a new project print ("Creating project...") project = trainer.create_project("Bird Classification") print("Project created!")
Bontsa ki a letöltött bird-photos.zip fájlt ugyanarra a könyvtárra, ahová a Jupyter Notebook-fájlt mentette. Adja hozzá a következő kódot a projekt madárfényképeinek könyvtárára való váltáshoz.
# Change to the directory for the bird photos import os os.chdir('./bird-photos/custom-photos')
Figyelmeztetés
A kódot csak egyszer futtassa ebben a cellában. Ha többször is megpróbálja futtatni a cellát a Python-kernel újraindítása nélkül, a cella futtatása meghiúsul.
Adja hozzá a következő kódot a madártípus-címkék listájának lekéréséhez. A címkék a bird-photos/custom-photos könyvtárban található mappanevek alapján jönnek létre:
# Create a tag list from folders in bird directory tags = [name for name in os.listdir('.') if os.path.isdir(name)] print(tags)
Ezután létrehozunk három függvényt, amelyeket egy
for
ciklusban fogunk meghívni:- A
createTag
függvény létrehoz egy osztálycímkét a Custom Vision-projektben. - A
createImageList
függvény a címke nevét és a címkeazonosítót használja képlista készítéséhez. - A
image_list
függvény kötegekben tölti fel a képeket a listából.
A három függvény létrehozása:
A Jupyter Notebook fájlban adja hozzá a
createTag
függvénykódot. A függvény létrehoz egy képnévcímkét a Custom Vision-projektben.tag_id = createTag(tag) print(f"tag creation done with tag id {tag_id}") image_list = createImageList(tag, tag_id) print("image_list created with length " + str(len(image_list))) # Break list into lists of 25 and upload in batches for i in range(0, len(image_list), 25): batch = ImageFileCreateBatch(images=image_list[i:i + 25]) print(f'Upload started for batch {i} total items {len(image_list)} for tag {tag}...') uploadImageList(batch) print(f"Batch {i} Image upload completed. Total uploaded {len(image_list)} for tag {tag}")
Ezután adja hozzá a függvény kódját
createImageList
. A függvény két paramétert használ: egytag
nevet a mappanevek listájából és atag_id
Custom Vision projektben létrehozott címkéből. A függvény azbase_image_url
érték használatával állítja be a könyvtárat arra a mappáratag
, amely a mappanevekből létrehozott képeket tartalmazza. Ezután hozzáfűzünk minden képet a listához, amelyet kötegekben fogunk feltölteni a létrehozotttag
:def createImageList(tag, tag_id): # Set directory to current tag. base_image_url = f"./{tag}/" photo_name_list = os.listdir(base_image_url) image_list = [] for file_name in photo_name_list: with open(base_image_url+file_name, "rb") as image_contents: image_list.append(ImageFileCreateEntry(name=base_image_url+file_name, contents=image_contents.read(), tag_ids=[tag_id])) return image_list
Az utolsó hozzáadandó kód a
uploadImageList
függvény létrehozása. Átadjuk aimage_list
mappából létrehozott listát, majd feltöltjük a listát atag
következőre:def uploadImageList(image_list): upload_result = trainer.create_images_from_files(project_id=project.id, batch=image_list) if not upload_result.is_batch_successful: print("Image batch upload failed.") for image in upload_result.images: print("Image status: ", image.status) exit(-1)
- A
Most hozzáadjuk a fő metódus kódját. Minden címke esetében a metódus meghívja a létrehozott három függvényt. Végigfuttatjuk az egyes címkéket (mappanevet) a
tags
gyűjteményben, amelyet a bird-photos/custom-photos könyvtár mappáiból hoztunk létre. A ciklus lépései afor
következők:Hívja meg a
createTag
korábban létrehozott függvényt, hogy létrehozza az osztályttag
a Custom Vision projektben.Hívja meg a
createImageList
korábban létrehozott függvényt a Custom Visionből visszaadott névvel éstag_id
értékekkeltag
. A függvény visszaadja a feltöltendő képek listáját.Hívja meg a
imageList
korábban létrehozott függvényt, hogy feltöltse a képeket aimage_list
25-ös kötegekből. 25-ös kötegekben töltjük fel, mert a Custom Vision időtúllépést ér el, ha egyszerre próbáljuk feltölteni a teljes adathalmazt.for tag in tags: tag_id = createTag(tag) print(f"tag creation done with tag id {tag_id}") image_list = createImageList(tag, tag_id) print("image_list created with length " + str(len(image_list))) # Break list into lists of 25 and upload in batches. for i in range(0, len(image_list), 25): batch = ImageFileCreateBatch(images=image_list[i:i + 25]) print(f'Upload started for batch {i} total items {len (image_list)} for tag {tag}...') uploadImageList(batch) print(f"Batch {i} Image upload completed. Total uploaded {len(image_list)} for tag {tag}")
Figyelmeztetés
A kódot csak egyszer futtassa ebben a cellában. Ha többször is megkísérli futtatni a cellát a Custom Vision-projekt törlése nélkül, a cella futtatása sikertelen lesz.