AWS Türkçe Blog

Amazon Lookout for Vision ve AWS Panorama kullanılarak görüntü işleme tabanlı anormallik algılama

Orijinal makale: Link (Audrey Timmerman, Farooq Sabir, James Wu, Elizabeth Samara Rubio ve Shreyas Subramanian)

Bu, Tyson Foods Inc.’in et işleme tesislerinde endüstriyel süreçleri otomatikleştirmek için uçta görüntü işleme uygulamalarını nasıl kullandığına ilişkin iki bölümlük dizinin ikinci gönderisidir. 1. bölümde, Amazon SageMaker ve AWS Panorama ile oluşturulmuş paketleme hatlarında bir envanter sayımı uygulamasını ele aldık. Bu yazıda, endüstriyel ekipmanın öngörücü bakımı için uçta görü tabanlı bir anormallik algılama çözümünü tartışıyoruz.

Tyson Gıda’da operasyonel mükemmellik önemli bir önceliktir. Öngörücü bakım, genel ekipman etkinliğini (Overall Equipment Effectiveness – OEE) sürekli olarak geliştirerek bu hedefe ulaşmak için vazgeçilmez bir varlıktır. 2021 yılında Tyson Foods, üretim sırasında başarısız olan ürün taşıyıcılarının ekip üyelerinin güvenliğini, operasyonlarını veya ürün kalitesini etkilemesini önlemek için makine öğrenimi (ML) tabanlı bir görüntü işleme projesi başlattı. Bir ürün taşıyıcı bozulduğunda veya yanlış pozisyona girdiğinde, üretim durdurulmalıdır. Zamanında yakalanmazsa, ekip üyesi emniyeti ve makine için bir tehdit oluşturuyor. Manuel denetim yöntemiyle operatör hat başına 8.000 pim denetler. Bu yavaş ve zorlu bir görevdir, çünkü detaylara dikkat önemlidir. Tyson Foods’daki ML uygulayıcıları, denetim sürecini otomatikleştirmek ve anomalileri sürekli olarak tespit etmek için görüntü işleme modelleri geliştirdiler. Bu işlem, bakım ekibinin çevrim süresini azaltmasına ve 8.000 pim denetlemenin güvenilirliğini artırmasına olanak tanır.

Görüntüleri analiz etmek ve anomalileri tespit etmek için özel bir ML modeli geliştirmek ve bu modellerin uçta verimli çalışmasını sağlamak zor bir görevdir. Bu, özel uzmanlık, zaman ve kaynaklar gerektirir. Tüm geliştirme döngüsünün tamamlanması aylar sürebilir. Bu serinin 1. bölümünde belirtilen yaklaşımlarla Tyson Foods’daki ürün taşıyıcılarının durumunu, Amazon Lookout for Vision gibi AWS tarafından yönetilen hizmetleri kullanarak rekor sürede izleme projesini tamamladık.

Çözüme genel bakış

Bölüm 1’deki tepsi sayımı kullanım durumu için tasarlanan desenler, kod ve altyapı ürün taşıyıcı projesinde kolayca çoğaltılmıştır. İlk bakışta bu projeler çok farklı görünse de, özünde aynı beş bileşenden oluşuyor: görüntü yakalama (image capture), etiketleme (labeling), model eğitimi (model training), çerçeve tekilleştirme (frame deduplication) ve çıkarım (inference).

Bu gönderi, AWS Panorama ve Lookout for Vision kullanarak başarısız ürün taşıyıcıları (veya benzer üretim hattı montajı) için görüntü işleme tabanlı bir anormallik algılama çözümünün nasıl kurulacağını gösterir. İş akışı, uçtaki bir AWS Panorama cihazında nesne algılama modeli aracılığıyla çıkarımla başlar. Nesne algılama modeli görüntüyü kırpar ve sonucu pim görüntülerini sınıflandıran Lookout for Vision algılama modeline iletir. Anormal pim görüntüleri ve model sonuçları buluta gönderilir ve ek işlem için kullanılabilir.

Aşağıdaki diyagram bu mimariyi göstermektedir.

Önkoşullar

Bu yazı ile birlikte takip etmek için aşağıdakilere ihtiyacınız var:

Nesne algılama modelini eğitin

Çok modelli çıkarım tasarımımızın ilk aşaması, ürün taşıyıcılarını tespit etmek ve işaretlemek üzere eğitilmiş bir SSD nesne algılama modelidir. Pimler, Lookout for Vision kullanarak anomali sınıflandırma modelini eğitmek için kullanılır. Ürün taşıyıcı hattının başlangıcına referans eden işaret, her döngüyü izlememize ve anomali algılamalarını tekilleştirmemize yardımcı olur.

Aşağıdaki görüntü, pim algılama SSD modelinden bir örnek çıkarım sonucudur.

Lookout for Vision kullanarak anomali sınıflandırma modelini eğitin

Lookout for Vision, nesnelerdeki görsel kusurları belirlemeye yardımcı olmak için görüntü işlemeyi kullanan tam olarak yönetilen bir ML hizmetidir. Hemen hemen hiç kodla hızlı bir şekilde bir anomali algılama modeli oluşturmanıza olanak tanır ve başlamak için çok az veri gerektirir (en az 20 normal ve 10 anomali görüntü). Lookout for Vision modelini eğitmek dört adımlı bir süreci takip eder:

  1. Lookout for Vision projesi oluşturun.
  2. Ürün taşıyıcı veri kümesi oluşturun.
  3. Lookout for Vision modelini eğitin ve hassas ayarını yapın.
  4. Çıkarım için Lookout for Vision modelini dışa aktarın.

Bu bölümde, Adım 1 – 3 için size yol gösteriyoruz.

Lookout for Vision projesi oluşturma

Lookout for Vision projesi oluşturma hakkında yönergeler için Projenizi oluşturma dokümanına bakınız.

Ürün taşıyıcı veri kümesi oluşturun

Lookout for Vision için veri kümesi kare şeklinde görüntüler, JPG veya PNG formatı, minimum piksel boyutu 64 x 64 ve maksimum 4096 x 4096 piksel boyutu olmalıdır. Gereksinimleri karşılayan bir veri kümesi oluşturmak için, her sınırlayıcı kutuyu (bounding box) kırpmak ve aşağıdaki Python kodunu kullanarak orijinal en boy oranını korurken bunları yeniden boyutlandırmak zorunda kaldık. Bu kodu, Lookout for Vision için son 150 x 150 piksel görüntüleri oluşturmak için Bölüm 1’de açıklanan görüntü yakalama akışına ekliyoruz.

def crop_n_resize_image(self, img, bbox, size, padColor=0):

    # crop images ==============================
    crop = img[bbox[1]:bbox[3],bbox[0]:bbox[2]].copy()
    
    # cropped image size
    h, w = crop.shape[:2]
    # designed crop image sizes
    sh, sw = size

    # interpolation method
    if h > sh or w > sw: # shrinking image
        interp = cv2.INTER_AREA
    else: # stretching image
        interp = cv2.INTER_CUBIC

    # aspect ratio of image
    aspect = w/h 

    # compute scaling and pad sizing
    if aspect > 1: # horizontal image
        new_w = sw
        new_h = np.round(new_w/aspect).astype(int)
        pad_vert = (sh-new_h)/2
        pad_top, pad_bot = np.floor(pad_vert).astype(int), np.ceil(pad_vert).astype(int)
        pad_left, pad_right = 0, 0
    elif aspect < 1: # vertical image
        new_h = sh
        new_w = np.round(new_h*aspect).astype(int)
        pad_horz = (sw-new_w)/2
        pad_left, pad_right = np.floor(pad_horz).astype(int), np.ceil(pad_horz).astype(int)
        pad_top, pad_bot = 0, 0
    else: # square image
        new_h, new_w = sh, sw
        pad_left, pad_right, pad_top, pad_bot = 0, 0, 0, 0

    # set pad color
    if len(img.shape) is 3 and not isinstance(padColor, (list, tuple, np.ndarray)): # color image but only one color provided
        padColor = [padColor]*3

    # scale and pad
    scaled_img = cv2.resize(crop, (new_w, new_h), interpolation=interp)
    scaled_img = cv2.copyMakeBorder(scaled_img, pad_top, pad_bot, pad_left, pad_right, borderType=cv2.BORDER_CONSTANT, value=padColor)

    return scaled_img
Bash

Aşağıda işlenmiş ürün taşıyıcı görüntülerine örnekler verilmiştir.

Resimleri bir etiket bildirim dosyasını döndüren Amazon SageMaker Ground Truth aracılığıyla etiketleriz. Bu dosya, anomali algılama veri kümesini oluşturmak için Lookout for Vision’a alınır. Görüntüleri Lookout for Vision platformunda etiketleyebilirsiniz, ancak bu yaklaşımı bu projede kullanmadık. Aşağıdaki ekran görüntüsü, Lookout for Vision konsolunda etiketli veri kümesini gösterir.

Lookout for Vision modelini eğitin ve ayarlayın

Anomali algılama modelini Lookout for Vision içinde eğitmek, bir düğmeye tıklamak kadar basittir. Lookout for Vision, model performansını doğrulamak için verilerin%20’sini otomatik olarak test seti olarak tutar. İyi model sonuçları elde etmenin anahtarı etiketleme ve görüntü kalitesine odaklanmaktır. Kullanılan ilk görüntü boyutu çok küçüktü ve kritik ayrıntılar çözünürlük nedeniyle kayboldu. Çözünürlüğün 64 x 64’ten 150 x 150’ye yükseltilmesi, model doğruluğunda önemli bir sıçrama ile sonuçlandı. Geliştirme ekibi etiketleri ayarlamak için, her sınıf için tanımları tasarlamada bilgilerini kullanmak üzere tesisin konu uzmanlarıyla önemli miktarda zaman geçirdi. Bu sınıf tanımlarının çok açık olması zorunluydu ve onları mükemmel yapmak için birkaç yineleme gerekti. Aşağıdaki ekran görüntüsü, iyi kurulmuş sınıf tanımlarıyla elde edilen sonuçları gösterir.

AWS Panorama uygulamasını geliştirin

AWS Panorama uygulaması, AWS Panorama SDK’sını kullanarak giriş video akışlarını işlemek, çıkarım yapmak ve video sonuçlarını görüntülemek için AWS Panorama Cihazına dağıtılan bir çıkarım konteyneridir. Çıkarma kodunun çoğu Bölüm 1’deki ile aynıdır; aşağıdaki özellikler özellikle bu ürün taşıyıcısı kullanım durumu için eklenir:

  • Görüntü karesi çıkarım tetikleyicisi oluşturma
  • Lookout for Vision çıkarımı çalıştırma
  • Pim konumunu tekilleştirme (deduplicate) ve yalıtma

Görüntü karesi çıkarım tetikleyicisi oluşturma

Bu kullanım durumunda, ürün taşıyıcılarımız sürekli olarak video karesi boyunca hareket eder ve kamera görünümünden çıkana kadar aynı pimler tekrar tekrar algılanabilir. Anormallik sınıflandırması için Lookout for Vision modeline yinelenen pimler göndermekten ve bilgi işlem kaynaklarını boşa harcamaktan kaçınmak için, çıkarım kodumuzda görüntü karelerini azaltan ve çıkarım için çoğaltılan pimlerin sayısını azaltan bir yazılım tetikleyicisi geliştirdik. Aşağıdaki ekran görüntüsünde, tespit edilen minimum pim sayısı 8’dir ve tespit edilen maksimum pim sayısı 10’dur.

Bu mantık, kamera görünümüne giren yeni ürün taşıyıcılarının sayısının sayacı olan ürün taşıyıcı kimliklerini kullanarak tetikleyiciyi belirler. Bunu, bir görüntü karesindeki sınırlayıcı kutuların sayısının maksimum değere ulaştığını belirleyerek elde ederiz. Önceki şekilde gösterildiği gibi, herhangi bir zamanda tespit edilen minimum ve maksimum olası sınırlama kutuları vardır. Sayım, kamera görünümüne giren yeni bir ürün taşıyıcısına karşılık gelen minimum ve maksimum değer arasında salınır. Aşağıdaki şekil salınım desenini göstermektedir. Bir kamera çerçevesi sadece altı ürün taşıyıcısına sığabileceğinden, ürün taşıyıcı kimliği 6 artırıldığında tüm çerçevenin kaydığını biliyoruz.

Lookout for Vision çıkarımı çalıştırma

Sınırlayıcı kutuları görüntü karesinden kırpıyoruz ve bunları daha önce açıklanan aynı yeniden boyutlandırma işlevini kullanarak işliyoruz ve daha sonra bu görüntüleri anomali sınıflandırması için Lookout for Vision modeline iletiyoruz. Buna karşılık, Lookout for Vision modeli bir etiket (normal veya anomaly) ve güven puanı üretir.

Pim konumunu tekilleştirme (deduplicate) ve yalıtma

Son olarak bu kullanım durumunda, ürün taşıyıcılarının göreceli konumunu belirlemek ve tekrarları önlemek için kötü pim başına yalnızca bir giriş oluşturmak önemliydi. Pim konumunu izlemek için, işareti referans noktası olarak kullanmak ve ürün taşıyıcı kimliğini saymak üzere çıkarım kodu yazılmıştır. Bir anomali algılandığında, ürün taşıyıcı kimliği, işarete göre konum referansı sağlamak için pim görüntüsüyle birlikte kaydedilir. Bu işareti, anomali algılamalarını tekilelememize ve tüm bir ürün taşıyıcı hattının etrafta döndüğü zamanı takip etmemize yardımcı olması için de kullanıyoruz. Her işaret görüntülendiğinde artırılan bir döngü kimliği parametresi vardır ve ürün taşıyıcı kimliği gibi tüm parametreler yeni bir döngü başlatmak için 0’a sıfırlanır.

AWS Panorama ile modelleri uçta dağıtın

Modelleri ve çıkarım kodunu hazır hale getirdiğimizde, nesne algılama modelini, çıkarım kodunu ve kamera akışını bir konteynere paketleyip Bölüm 1’de açıklanan aynı dağıtım modelini kullanarak AWS Panorama’ya dağıtırız.

E-posta uyarıları

Sistem bir anomali algıladığında, arızalı pimi içeren görüntü depolama için Amazon S3’ye gönderilir ve bununla ilişkili meta veriler AWS IoT SiteWise‘a gönderilir. Her vardiyanın sonunda bir EventBridge olayı, tesis personeline özet e-posta göndermek için görüntüleri ve meta verileri kullanan bir Lambda işlevini tetikler. Tesis personeli vardiya değişimi sırasında onarım yaparken bu bilgileri kullanır.

Sonuç

Bu yazıda, Lookout for Vision ve AWS Panorama’yı kullanarak üretim ortamında görüntü işleme tabanlı bir anomali algılama sisteminin nasıl kurulacağını gösterdik. Bu çözüm sayesinde tesisler her hat başına günde 1 saat ekip üyeliğinden tasarruf edebilir. Bu fabrikayı tek başına yılda yaklaşık 15.000 saatlik vasıflı işçilikten kurtaracak. Bu, değerli Tyson ekip üyelerinin diğer ve daha karmaşık görevleri tamamlamak için zamanını boşaltır.

Bu süreçte eğitilen modeller iyi performans gösterdi. SSD pim algılama modeli her iki sınıfta da %95 doğruluk elde etti. Lookout for Vision modeli, başarısız pim algılaması için %99,1 doğrulukta performans gösterecek şekilde ayarlandı. Bu projede kullanılan iki modele rağmen, çıkarım kodu 10 FPS’de çalışan hat hızına kolayca ayak uydurabildi.

Bu projenin şimdiye kadar en heyecan verici sonucu gelişme zamanındaki hızlanmadır. Bu proje, Bölüm 1’deki projeye kıyasla iki model ve daha karmaşık uygulama kodu kullansa da, tamamlamak için %12 daha az geliştirici zamanı aldı. Bu çeviklik, yalnızca Bölüm 1’de kurulan yinelenebilir desenler ve AWS’in yönetilen hizmetlerini kullanarak mümkündür. Bu kombinasyon, nihai çözümlerimizi ölçeklendirmeye ve endüstriye hazır hale getirdi. Amazon Lookout for Vision için Amazon Lookout for Vision Kaynakları sayfasına giderek daha fazla bilgi edinin. GitHub deposuna giderek AWS Panorama’nın diğer örneklerini de iş başında görüntüleyebilirsiniz.