הורדה, עיבוד מראש והעלאה של מערך הנתונים ImageNet
במאמר הזה מוסבר איך להוריד את מערך הנתונים ImageNet, לבצע בו עיבוד מוקדם ולהעלות אותו לשימוש בארכיטקטורת Cloud TPU VM.
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 לשימוש על ידי מודל למידת מכונה:
- מוודאים שיש לכם מספיק מקום בתיקייה שאליה אתם מורידים את הקובץ.
- הגדרת ספריות היעד
- נרשמים באתר ImageNet ומבקשים הרשאת הורדה.
אימות דרישות המקום
בין אם מורידים את מערך הנתונים למחשב מקומי או למכונה וירטואלית, צריך לפחות 300GB של נפח אחסון פנוי ביעד ההורדה.
הקצאת הדיסק שמוגדרת כברירת מחדל למכונת TPU VM היא 100GiB. ההורדה למכונת ה-TPU VM דורשת 300GiB, לכן אם אתם מורידים למופע של מכונת ה-TPU VM, תצטרכו להוסיף נפח אחסון בלוקים עמיד עם 200GiB של נפח אחסון נוסף כדי להשלים את ההורדה. ב-TPU VM, אפשר לבדוק את נפח האחסון הזמין באמצעות הפקודה df -ha. מידע נוסף על שינוי הגודל של דיסקים מצורפים זמין במאמרים שינוי ההגדרות של נפח Google Cloud 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}.