משתמש:האדם-החושב/טיוטה

קונבולוציה (עיבוד תמונה)

עריכה

קונבולוציה (באנגלית: convolution, בעברית: כינוס) הינה דרך לזיקוק תמונות לצורך חידודן, זיהוי קצוות או צורות פרימיטיביות כלשהן בתוכן ועוד בתחום הבינה המלאכותית והראיה הממוחשבת. שמות נוספים המתאימים לשיטה זאת הינם Convolutional neural networks (בעברית: רשתות עצביות מתפתחות) או ConvNet או פשוט CNN.

היסטוריה

עריכה

השיטה הומצאה על ידיי יאן לקון חוקר ממעבדות נוקיה בל בשנת 1988. השיטה התבססה על מודל הניוקוגניטרון רשת עצבית מלאכותית דיי בסיסית שהומצאה בשנת 1980 על ידיי המדען קוניהיקו פוקושימה. השיטה בזמנו ידעה לזהות ספרות בכתב יד ונעשה בה שימוש בבנקים ומערכות דואר אך לא יותר מכך מכיוון שבזמן זה היה מחסור במאגריי מידע גדולים ומפותחים דבר הכרחי על מנת לאמן בינה מלאכותית מסוג זה, בעיה נוספת הייתה החומרה שאז בזמנו לא הייתה מספיק חזקה על מנת לאמן בינה מלאכותית מסוג זה.

בשנת 2012 חלה תפנית כאשר AlexNet הראתה שאולי הגיע הזמן לחזור לרשתות עצביות מתפתחות עם הטכנולוגיה ודאטה של ימיינו שהתפתחו הרבה מאוד.

אופן הפעולה

עריכה

עוברים על התמונה ומכפילים עם הליבה (באנגלית: kernel) שהיא מטריצה בגודל   עם קפיצות בגודל   כאשר   מייצג את גודל הקפיצה בציר ה-  ו   מייצג את גודל הקפיצה בציר ה-  (בדרך כלל   ו   יהיו באותו גודל ולכן פשוט יקראו   כנ"ל לגביי  ), כאשר כל ליבה יכולה לשמש לצורך מטרה שונה

או פשוט  .

כאשר   מייצג את התמונה החדשה,   מייצג את התמונה המקורית ו   מייצג את הליבה.

 
קונבולוציה על תמונה בגודל 4x4 (כחול) עם ליבה בגודל 3x3 (צל כחול כהה) וקפיצות בגודל 1 היוצרת תמונה חדשה בגודל 2x2 (טורקיז)
פעולה ליבה ω התמונה הסופית g(x,y)
הזהות    
זיהוי קצוות    
   
   
חידוד    
טשטוש קופסה    
טשטוש גאוס 3 × 3    
טשטוש גאוס 5 × 5    
ביטול חידוד 5 × 5

מבוסס על טשטוש גאוס

עם כמות 1 וסף 0

   

פסאודו קוד :

for each image row in input image:
    for each pixel in image row:

        set accumulator to zero

        for each kernel row in kernel:
            for each element in kernel row:

                if element position  corresponding* to pixel position then
                    multiply element value  corresponding* to pixel value
                    add result to accumulator
                endif

         set output image pixel to accumulator

מודל TensorFlow העושה שימוש בשכבות קונבולוציה (Conv2D) :

def build_classifier():
    model = Sequential(name="classifier")

    model.add(Conv2D(64, kernel_size=5, strides=2, input_shape=img_shape, padding='same'))
    model.add(LeakyReLU(alpha=0.2))
    model.add(Dropout(0.3))

    model.add(Conv2D(128, kernel_size=5, strides=2, padding='same'))
    model.add(LeakyReLU(alpha=0.2))
    model.add(Dropout(0.3))

    model.add(Conv2D(256, kernel_size=5, strides=2, padding='same'))
    model.add(LeakyReLU(alpha=0.2))
    model.add(Dropout(0.3))

    model.add(Conv2D(512, kernel_size=5, strides=2, padding='same'))
    model.add(LeakyReLU(alpha=0.2))
    model.add(Dropout(0.3))

    model.add(Flatten())
    model.add(Dense(1, activation='sigmoid'))

    model.summary()
    image = Input(shape=img_shape)
    validity = model(image)
    return Model(image, validity)

ריפוד

עריכה

ריפוד (באנגלית: padding) נועד על מנת לפתור שתי בעיות:

  1. במהלך ביצוע קונבולוציה נוצרת בעיה אנחנו בעצם עוברים פחות פעמים על קצוות התמונה וכתוצאה מכך לעבד מידע יקר ערך אומנם זה יכול להראות שולי אבל לאחר שימוש בהרבה שכבות קונבולוציה במודל זה מצטבר להרבה מה גם זה פרקטיקה רעה לא לנצל את כל הדאטה.
  2. לאחר כל שימוש בקונבולוציה התמונה תקטן ובעצם אם נשתמש בכמה שכבות קונבולוציה נוכל באיזשהו שלב להגיע למצב שבו אנחנו צמצמנו את התמונה עד כדיי מחיקתה.

תהליך הריפוד בעצם "מרפד" את התמונה באפסים מצדדיה ובכך פותר את שתי הבעיות כי עכשיו אנו עוברים גם על הקצוות כמו שצריך וגם לאחר קונבולוציה התמונה תישאר באותו הגודל (כמובן בהנחה שהוספנו את הריפוד בגודל המתאים).

למשל לתמונה בגודל של   עם ליבה בגודל   וקפיצות בגודל של אחד אם נוסיף שכבת ריפוד אחת מכל כיוון לאחר קונבולוציה נשאר עם תמונה בגודל   כלומר לא הקטנו אותה.

כמובן שבגלל שריפדנו באפסים אין לחשוש להטיית/עיוות התוצאות כתוצאה מהריפוד.

ראו גם

עריכה
  • Ludwig, Jamie (n.d.). Image Convolution (PDF). Portland State University.
  • Lecarme, Olivier; Delvare, Karine (בינואר 2013). The Book of GIMP: A Complete Guide to Nearly Everything. No Starch Press. p. 429. ISBN 978-1593273835. {{cite book}}: (עזרה)
  • Gumster, Jason van; Shimonski, Robert (במרץ 2012). GIMP Bible. Wiley. pp. 438–442. ISBN 978-0470523971. {{cite book}}: (עזרה)
  • Shapiro, Linda G.; Stockman, George C. (בפברואר 2001). Computer Vision. Prentice Hall. pp. 53–54. ISBN 978-0130307965. {{cite book}}: (עזרה)

קישורים חיצוניים

עריכה

קטגוריה:למידה חישובית קטגוריה:אלגוריתמים קטגוריה:בינה מלאכותית