Pengaruh Centering Object pada Model Deep Learning

By | November 25, 2024
211 Views

Centering object yaitu meletakan objek ditengah canvas dengan margin tertentu. Centering object mempunyai kegunaan yang sangat penting pada proses object recognition yaitu untuk meningkatkan akurasi hasil. Contoh kasusnya yaitu centering object terutama untuk object yang bentuk nya tiny seperti huruf i, I, dan angka 1 yang bila seragamkan ukurannya akan jadi aneh.

Apalagi pada algoritma deep learning tertentu mensyaratkan untuk ukuran object berbentuk square sehingga center object menjadi sangat krusial. Mari kita coba dengan contoh angka 1

Operasi bounding box atau disebut blob akan menghasilkan posisi x,y, width dan height seperti berikut

tanpa centering object

Mengakibatkan menjadi persegi panjang, lalu kita lakukan  operasi centering objek akan terlihat angka 1 ditengah sebagai objek yang utuh. Berikut hasil dari centering object

dgn centering object

 

Nah kalian bisa membedakan hasil antara

  1. tanpa centering object dengan
  2. centering object

Centering Object

Ketika sudah didapatkan object hasil bounding box dilanjutkan dengan centering object, maka kalian bisa melakukan resize sesuai kebutuhan tanpa perlu takut hasil akurasi model berkurang karena jika tanpa centering object dilanjutkan dengan operasi resize maka hasilnya akan ambigu. Pada proses training pada umum nya pun dataset yang kita gunakan menggunakan centering object juga

Algoritma Centering Object

Algoritma centering object sebenarnya mudah kok

  1. hitung nilai max dari panjang lebar object, misalkan object front nya berukuran lebar: 100, tinggi; 80
    • kita sebut dengan xfront sebagai lebar front dan yfront sebagai tinggi front
  2. maka background nya akan dibuat 100 karena bentuk nya nanti adalah square maka diambil yang paling besar nilainya.
    • kita sebut dengan xback sebagai lebar back dan yback sebagai tinggi back masing-masing dengan nilai 100
  3. untuk centering nya dengan rumus sebagai berikut yang merupakan lokasi move terbaru dari objeck front agar ditengah background
    • x = \frac{xback-xfront}{2} dan y = \frac{yback-yfront}{2}
See also  Perbandingan Hasil Segmentasi Otsu vs UNet Deep Learning

Daripada bingung2, saya akan berikan kode nya yang sudah dilengkapi dengan margin

import cv2
import numpy as np

def ToCenter(front, background = 255, margin = 0):
    dim = 1
    if front.ndim==3:
        dim = 3

    tinggi_front = front.shape[0]
    lebar_front = front.shape[1]

    
    # agar lokasi ditengah2 
    tinggi_back = np.max(front.shape)+margin
    lebar_back = np.max(front.shape)+margin

    back = np.ones([tinggi_back,lebar_back,dim])*background
    
    
    # dimensi back
    tinggi1 = back.shape[0]
    lebar1 = back.shape[1]

    # dimensi front
    tinggi2 = front.shape[0]
    lebar2 = front.shape[1]

    
    tinggi = (tinggi1-tinggi2)//2
    lebar = (lebar1-lebar2)//2
    
    # move ke center
    back[tinggi:tinggi+tinggi_front,lebar:lebar+lebar_front,:] = front
    
    return np.uint8(back)


image = cv2.imread('crop.jpeg',1)

image2 = ToCenter(image,background=0, margin = 1)

plt.figure()
plt.subplot(1,2,1),plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.subplot(1,2,2),plt.imshow(cv2.cvtColor(image2, cv2.COLOR_BGR2RGB))
plt.show()

# cv2.imwrite('centering object.jpeg',image2)