הורדה, עיבוד מראש והעלאה של מערך הנתונים ImageNet
במאמר הזה מוסבר איך להוריד את מערך הנתונים ImageNet, לבצע בו עיבוד מקדים ולהעלות אותו לשימוש בארכיטקטורת מכונת וירטואלית של Cloud TPU.
ImageNet הוא מסד נתונים של תמונות. התמונות במסד הנתונים מאורגנות בהיררכיה, וכל צומת בהיררכיה מיוצג על ידי מאות ואלפי תמונות.
הגודל של מסד הנתונים ImageNet אומר שאימון מודל יכול לקחת הרבה זמן. אפשרות חלופית היא להשתמש בגרסת הדגמה של מערך הנתונים, שנקראת fake_imagenet. גרסת ההדגמה הזו מאפשרת לכם לבדוק את המודל, תוך צמצום דרישות האחסון והזמן שקשורות לשימוש במסד הנתונים המלא של ImageNet.
עיבוד מראש של מערך הנתונים המלא ImageNet
מערך הנתונים ImageNet מורכב משלושה חלקים: נתוני אימון, נתוני אימות ותוויות תמונות.
נתוני האימון מכילים 1,000 קטגוריות ו-1.2 מיליון תמונות, והם זמינים להורדה. נתוני האימות והבדיקה לא כלולים בנתוני האימון של ImageNet (הכפילויות הוסרו).
נתוני האימות והבדיקה מורכבים מ-150,000 תמונות שנאספו מ-Flickr וממנועי חיפוש אחרים, וסומנו ידנית בנוכחות או בהיעדר של 1, 000 קטגוריות של אובייקטים. 1,000 קטגוריות האובייקטים כוללות גם צמתים פנימיים וגם צמתי עלים של ImageNet, אבל אין חפיפה ביניהן. קבוצת משנה אקראית של 50,000 תמונות עם תוויות פורסמה כנתוני אימות, יחד עם רשימה של 1,000 קטגוריות. התמונות שנותרו משמשות לצורך הערכה, והן פורסמו ללא תוויות.
שלבים לעיבוד מראש של מערך הנתונים המלא ImageNet
יש חמישה שלבים להכנת מערך הנתונים המלא של ImageNet לשימוש על ידי מודל למידת מכונה:
אימות דרישות המקום
לא משנה אם מורידים את מערך הנתונים למחשב מקומי או למכונה וירטואלית, צריך לפחות 300GB של נפח אחסון פנוי ביעד ההורדה.
הקצאת הדיסק שמוגדרת כברירת מחדל למכונת TPU VM היא 10GB. ההורדה למכונת ה-TPU הווירטואלית דורשת 300GiB, ולכן אם אתם מתכוונים להוריד למכונת ה-TPU הווירטואלית, אתם צריכים להוסיף נפח אחסון בלוקים עמיד עם נפח נוסף כדי להשלים את ההורדה, או להגדיל את הגודל של דיסק האתחול ב-TPU. ב-TPU VM, אפשר לבדוק את נפח האחסון הזמין באמצעות הפקודה df -ha. מידע נוסף על שינוי הגודל של דיסקים זמין במאמרים שינוי הגודל והביצועים המוקצים של נפח Hyperdisk ושינוי הגודל של נפח Persistent Disk.
כשמוסיפים אחסון בלוקים עמיד, חשוב לציין את הספרייה שבה הדיסק הותקן. לדוגמה: /mnt/disks/mnt-dir.
הגדרת ספריות היעד
במכונה המקומית או במופע של מכונה וירטואלית, מגדירים את מבנה הספריות לאחסון הנתונים שהורדו.
עוברים לספרייה שבה רוצים להוריד את הנתונים. אם אתם משתמשים ב-Persistent Disk, מחליפים את DATASET_ROOT_DIR בספרייה שבה הדיסק מותקן, לדוגמה,
/mnt/disks/mnt-dir:cd DATASET_ROOT_DIR
יוצרים ספרייה, לדוגמה,
imagenet, ביעד ההורדה (מחשב מקומי או TPU VM).mkdir imagenetבספרייה הזו, יוצרים שתי ספריות משנה:
trainו-validation.mkdir imagenet/train mkdir imagenet/validationמייצאים את ספריית
imagenetכקובץIMAGENET_HOME.export IMAGENET_HOME=DATASET_ROOT_DIR/imagenet sudo chown ${USER} ${IMAGENET_HOME}
הרשמה ובקשת הרשאה להורדת מערך הנתונים
נרשמים באתר Imagenet. לא תוכלו להוריד את מערך הנתונים עד ש-ImageNet תאשר את ההרשמה ותשלח לכם אימייל אישור. אם לא קיבלתם את אישור ההרשמה באימייל תוך כמה ימים, אתם יכולים ליצור קשר עם התמיכה של ImageNet כדי לברר למה ההרשמה שלכם לא אושרה. אחרי שההרשמה תאושר, תוכלו להוריד את מערך הנתונים. במדריכים ל-Cloud TPU שמשתמשים במערך הנתונים ImageNet, נעשה שימוש בתמונות מ-ImageNet Large Scale Visual Recognition Challenge 2012 (ILSVRC2012).
הורדת מערך הנתונים ImageNet
באתר ההורדה של LSRVC 2012, עוברים לקטע Images (תמונות) בדף ולוחצים לחיצה ימנית על Training images (תמונות לאימון) (Task 1 & 2) (משימה 1 ו-2). כתובת ה-URL להורדה של החלק הכי גדול של מערך האימון. שומרים את כתובת ה-URL.
לוחצים לחיצה ימנית על 'תמונות לאימון (משימה 3)' כדי לקבל את כתובת ה-URL של מערך האימון השני. שומרים את כתובת ה-URL.
לוחצים לחיצה ימנית על 'תמונות אימות (כל המשימות)' כדי לקבל את כתובת ה-URL של מערך נתוני האימות. שומרים את כתובת ה-URL.
אם מורידים את קובצי ImageNet למכונה המקומית, צריך להעתיק את הספריות במכונה המקומית לספרייה התואמת
$IMAGENET_HOMEבמכונה הווירטואלית. העתקת מערך הנתונים של ImageNet ממארח מקומי למופע של מכונה וירטואלית נמשכת כ-13 שעות.לפני שמעתיקים את מערך הנתונים ImageNet למכונה הווירטואלית של TPU, צריך לזהות את השם של מופע המכונה הווירטואלית של TPU. כדי לעשות את זה, מתחברים למכונת ה-TPU הווירטואלית באמצעות SSH. שם מכונת ה-VM מוצג בשורת הפקודה אחרי הסמל
@.משתמשים בפקודה הבאה כדי להעתיק את הקבצים שבתיקייה ~/imagenet במחשב המקומי אל
$IMAGENET_HOMEבמכונת ה-VM.gcloud compute scp --recurse $IMAGENET_HOME USERNAME@VM_INSTANCE_NAME:~/imagenet
מתוך
$IMAGENET_HOME, מורידים את הקבצים Training images (Task 1 & 2) באמצעות כתובת ה-URL השמורה.הקובץ Training images (Task 1 & 2) הוא מערך האימון הגדול. הגודל שלו הוא 138GiB, ואם מורידים אותו ל-TPU VM באמצעות Cloud Shell, ההורדה נמשכת כ-40 שעות. אם החיבור של Cloud Shell למכונה הווירטואלית מתנתק, אפשר להוסיף את הקידומת
nohupלפקודה או להשתמש ב-screen.cd $IMAGENET_HOME nohup wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train.tar
מחליפים את כתובת ה-URL בכתובת ה-URL ששמרתם קודם עבור 'תמונות לאימון (משימה 1 ומשימה 2)', כי יכול להיות שכתובת ה-URL השתנתה.
מחלקים את ספריות ההדרכה הנפרדות לספרייה
$IMAGENET_HOME/trainבאמצעות הפקודה הבאה. החילוץ נמשך בין שעה ל-3 שעות.tar xf $IMAGENET_HOME/ILSVRC2012_img_train.tar -C $IMAGENET_HOME/train
מחלקים את קובצי ה-tar של האימון שנמצאים בספרייה
$IMAGENET_HOME/train, כמו שמוצג בתסריט הבא:cd $IMAGENET_HOME/train for f in *.tar; do d=
basename $f .tarmkdir $d tar xf $f -C $d doneאחרי שאתם מחלצים את קובצי ה-tar, מומלץ למחוק אותם כדי לפנות מקום בדיסק.
מתוך
$IMAGENET_HOME, מורידים את הקבצים Training images (Task 3) באמצעות כתובת ה-URL שנשמרה.הקובץ Training images (Task 3) (תמונות לאימון (משימה 3)) הוא בגודל 728MB, וההורדה שלו אורכת כמה דקות בלבד, כך שלא צריך לנקוט אמצעי זהירות כדי למנוע ניתוק של Cloud Shell.
wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train_t3.tarמחליפים את כתובת ה-URL בכתובת ה-URL ששמרתם קודם עבור 'תמונות לאימון (משימה 3)', כי יכול להיות שכתובת ה-URL השתנתה.
מחלקים את ספריות ההדרכה הנפרדות לספרייה
$IMAGENET_HOME/trainבאמצעות הפקודה הבאה.tar xf $IMAGENET_HOME/ILSVRC2012_img_train_t3.tar -C $IMAGENET_HOME/train
מחלקים את קובצי ה-tar של האימון שנמצאים בספרייה
$IMAGENET_HOME/train, כמו שמוצג בתסריט הבא:cd ${IMAGENET_HOME}/train for f in *.tar; do d=`basename $f .tar` mkdir $d tar xf $f -C $d done
אחרי שאתם מחלצים את קובצי ה-tar, מומלץ למחוק אותם כדי לפנות מקום בדיסק.
מתוך
$IMAGENET_HOME, מורידים את הקבצים 'תמונות אימות (כל המשימות)' באמצעות כתובת ה-URL שנשמרה.יכול להיות שתהיה בעיה בחיבור ל-Cloud Shell כשמורידים את הקובץ Validation images (all tasks). כדי למנוע ניתוק של Cloud Shell, אפשר להשתמש ב-
nohupאו ב-screen.wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tarמחליפים את כתובת ה-URL בכתובת ה-URL ששמרתם קודם עבור 'תמונות לאימות' (כל המשימות), כי יכול להיות שכתובת ה-URL השתנתה.
ההורדה תימשך כ-30 דקות.
מחלקים את קובצי האימות הנפרדים לספרייה
$IMAGENET_HOME/validationבאמצעות הפקודה הבאה.tar xf $IMAGENET_HOME/ILSVRC2012_img_val.tar -C $IMAGENET_HOME/validation
אם הורדתם את קובצי האימות למחשב המקומי, אתם צריכים להעתיק את הספרייה
$IMAGENET_HOME/validationבמחשב המקומי לספרייה$IMAGENET_HOME/validationבמופע של המכונה הווירטואלית. פעולת ההעתקה הזו נמשכת כ-30 דקות.מורידים את קובץ התוויות.
wget -O $IMAGENET_HOME/synset_labels.txt \ https://raw.githubusercontent.com/tensorflow/models/master/research/slim/datasets/imagenet_2012_validation_synset_labels.txt
אם הורדתם את קובץ התוויות למחשב המקומי, אתם צריכים להעתיק אותו לספרייה
$IMAGENET_HOMEבמחשב המקומי אל$IMAGENET_HOMEבמופע של המכונה הווירטואלית. פעולת ההעתקה הזו נמשכת כמה שניות.השמות של ספריות המשנה של נתוני האימון (לדוגמה, n03062245) הם 'מזהי WordNet' (wnid). ב-ImageNet API אפשר לראות את המיפוי של מזהי WordNet לתוויות האימות המשויכות להם בקובץ
synset_labels.txt. במקרה הזה, קבוצת מילים נרדפות היא קבוצה של תמונות דומות מבחינה חזותית.
עיבוד מערך הנתונים של Imagenet והעלאה שלו ל-Cloud Storage (אופציונלי)
מורידים את הסקריפט
imagenet_to_gcs.pyמ-GitHub:wget https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/imagenet_to_gcs.pyאם אתם מעלים את מערך הנתונים ל-Cloud Storage:
משתמשים בקטגוריה קיימת או יוצרים קטגוריה חדשה לפי ההוראות שבמאמר יצירת קטגוריות.
מציינים את המיקום של קטגוריית האחסון כדי להעלות את מערך הנתונים של ImageNet:
export STORAGE_BUCKET=gs://BUCKET_NAME
אם אתם מעלים את מערך הנתונים למחשב המקומי או למכונה וירטואלית, צריך לציין ספריית נתונים לאחסון מערך הנתונים:
(vm)$ export DATA_DIR=$IMAGENET_HOME/DATASET_DIRECTORY
מתקינים את הספריות הבאות במחשב או בסביבה וירטואלית:
pip3 install google-cloud-storage pip3 install tensorflowמריצים את הסקריפט כדי לבצע עיבוד מקדים של מערך הנתונים הגולמי כ-TFRecords ומעלים אותו ל-Cloud Storage באמצעות הפקודה הבאה:
python3 imagenet_to_gcs.py \ --project=$PROJECT \ --gcs_output_path=$STORAGE_BUCKET \ --raw_data_dir=$IMAGENET_HOME \ --local_scratch_dir=$IMAGENET_HOME/tf_records
הסקריפט יוצר קבוצה של ספריות (גם לאימון וגם לאימות) של הטופס:
${DATA_DIR}/train-00000-of-01024
${DATA_DIR}/train-00001-of-01024
...
${DATA_DIR}/train-01023-of-01024
וגם
${DATA_DIR}/validation-00000-of-00128
${DATA_DIR}/validation-00001-of-00128
...
${DATA_DIR}/validation-00127-of-00128
אחרי שהנתונים מועלים לקטגוריה ב-Cloud, מריצים את המודל ומגדירים את --data_dir=${DATA_DIR}.