अमेज़ॅन लुकआउट फॉर विज़न सामान्य छवियों (यानी वस्तुओं की छवियों) की पहचान करने के लिए एक मशीन लर्निंग (एमएल) आधारित विसंगति का पता लगाने वाली सेवा प्रदान करता है बिना दोष) बनाम विषम छवियां (यानी, वस्तुओं की छवियां साथ में दोष), विसंगतियों के प्रकार (जैसे, गायब टुकड़ा), और इन विसंगतियों का स्थान। इसलिए, लुकआउट फॉर विजन उन ग्राहकों के बीच लोकप्रिय है जो औद्योगिक गुणवत्ता निरीक्षण (जैसे, असामान्य उत्पादों का पता लगाना) के लिए स्वचालित समाधानों की तलाश करते हैं। हालाँकि, ग्राहकों के डेटासेट को आमतौर पर दो समस्याओं का सामना करना पड़ता है:
- विसंगतियों वाली छवियों की संख्या बहुत कम हो सकती है और लुकआउट फॉर विजन (~20) द्वारा लगाए गए न्यूनतम विसंगतियों/दोष प्रकार तक नहीं पहुंच सकती है।
- सामान्य छवियों में पर्याप्त विविधता नहीं हो सकती है और इसके परिणामस्वरूप मॉडल विफल हो सकता है जब पर्यावरण की स्थिति जैसे कि उत्पादन में प्रकाश परिवर्तन होता है
इन समस्याओं को दूर करने के लिए, यह पोस्ट एक छवि वृद्धि पाइपलाइन पेश करती है जो दोनों समस्याओं को लक्षित करती है: यह छवियों में वस्तुओं को हटाकर सिंथेटिक विषम छवियों को उत्पन्न करने का एक तरीका प्रदान करती है और गॉसियन शोर, रंग, संतृप्ति, पिक्सेल जैसे नियंत्रित वृद्धि को पेश करके अतिरिक्त सामान्य छवियां उत्पन्न करती है। मूल्य स्केलिंग आदि। हम इसका उपयोग करते हैं imgaug पुस्तकालय दूसरी समस्या के लिए अतिरिक्त विषम और सामान्य छवियों को उत्पन्न करने के लिए वृद्धि शुरू करने के लिए। हम उपयोग करते हैं अमेज़ॅन सैजमेकर ग्राउंड ट्रुथ ऑब्जेक्ट रिमूवल मास्क उत्पन्न करने के लिए और लामा इमेज इनपेंटिंग (ऑब्जेक्ट रिमूवल) तकनीकों का उपयोग करके पहली समस्या के लिए ऑब्जेक्ट को निकालने के लिए एल्गोरिदम।
शेष पोस्ट निम्नानुसार व्यवस्थित है। धारा 3 में, हम सामान्य छवियों के लिए छवि वृद्धि पाइपलाइन प्रस्तुत करते हैं। धारा 4 में, हम असामान्य छवियों (उर्फ सिंथेटिक दोष पीढ़ी) के लिए छवि वृद्धि पाइपलाइन प्रस्तुत करते हैं। अनुभाग 5 संवर्धित डेटासेट का उपयोग करके दृष्टि प्रशिक्षण परिणामों के लिए लुकआउट को दिखाता है। धारा 6 दर्शाता है कि सिंथेटिक डेटा पर प्रशिक्षित लुकआउट फॉर विज़न मॉडल वास्तविक दोषों के विरुद्ध कैसा प्रदर्शन करता है। भाग 7 में, हम इस समाधान के लिए लागत अनुमान के बारे में बात करते हैं। इस पोस्ट के लिए हमारे द्वारा उपयोग किए गए सभी कोड तक पहुँचा जा सकता है यहाँ उत्पन्न करें.
1. समाधान अवलोकन
एमएल आरेख
दृष्टि विसंगति स्थानीयकरण मॉडल प्रशिक्षण के लिए लुकआउट के लिए प्रस्तावित छवि वृद्धि पाइपलाइन का आरेख निम्नलिखित है:
ऊपर दिया गया आरेख छवियों की एक श्रृंखला एकत्र करके शुरू होता है (चरण 1)। हम सामान्य छवियों (चरण 3) को बढ़ाकर और ऑब्जेक्ट हटाने वाले एल्गोरिदम (चरण 2, 5-6) का उपयोग करके डेटासेट को बढ़ाते हैं। इसके बाद हम डेटा को एक ऐसे प्रारूप में पैकेज करते हैं जिसे अमेज़ॅन लुकआउट फॉर विजन (चरण 7-8) द्वारा उपभोग किया जा सकता है। अंत में, चरण 9 में, हम लुकआउट फॉर विज़न लोकलाइज़ेशन मॉडल को प्रशिक्षित करने के लिए पैकेज्ड डेटा का उपयोग करते हैं।
यह छवि वृद्धि पाइपलाइन ग्राहकों को सीमित नमूना डेटासेट में सिंथेटिक दोष उत्पन्न करने के साथ-साथ सामान्य छवियों में अधिक मात्रा और विविधता जोड़ने की सुविधा देती है। यह लुकआउट फॉर विजन सेवा के प्रदर्शन को बढ़ावा देगा, ग्राहक डेटा की कमी को दूर करेगा और स्वचालित गुणवत्ता निरीक्षण प्रक्रिया को आसान बनाएगा।
2. डेटा तैयार करना
यहां से पोस्ट के अंत तक हम जनता का उपयोग करते हैं FICS-PCB: ऑटोमेटेड प्रिंटेड सर्किट बोर्ड विज़ुअल इंस्पेक्शन के लिए एक मल्टी-मोडल इमेज डेटासेट ए के तहत लाइसेंस प्राप्त डेटासेट क्रिएटिव कॉमन्स एट्रिब्यूशन 4.0 इंटरनेशनल (सीसी बाय 4.0) लाइसेंस छवि वृद्धि पाइपलाइन और परिणामी दृष्टि प्रशिक्षण और परीक्षण के लिए लुकआउट को चित्रित करने के लिए। यह डेटासेट स्वचालित पीसीबी दृश्य निरीक्षण प्रणालियों के मूल्यांकन का समर्थन करने के लिए डिज़ाइन किया गया है। यह फ्लोरिडा विश्वविद्यालय में सुरक्षा और आश्वासन (एससीएएन) प्रयोगशाला में एकत्र किया गया था। इसे एक्सेस किया जा सकता है यहाँ उत्पन्न करें.
हम इस परिकल्पना के साथ शुरू करते हैं कि ग्राहक डेटासेट के रूप में केवल एक पीसीबी बोर्ड (एक एस10 पीसीबी नमूना) की एक सामान्य छवि प्रदान करता है। इसे इस प्रकार देखा जा सकता है:
3. सामान्य छवियों के लिए छवि वृद्धि
लुकआउट फॉर विजन सेवा के लिए कम से कम 20 सामान्य छवियों और 20 विसंगतियों के प्रति दोष प्रकार की आवश्यकता होती है। चूंकि नमूना डेटा से केवल एक सामान्य छवि होती है, हमें छवि वृद्धि तकनीकों का उपयोग करके अधिक सामान्य छवियां उत्पन्न करनी चाहिए। एमएल दृष्टिकोण से, विभिन्न वृद्धि तकनीकों का उपयोग करके कई छवि परिवर्तनों को खिलाने से मॉडल की सटीकता और मजबूती में सुधार हो सकता है।
हम उपयोग करेंगे imgaug सामान्य छवियों की छवि वृद्धि के लिए। Imgaug एक ओपन-सोर्स पायथन पैकेज है जो आपको ML प्रयोगों में छवियों को बढ़ाने देता है।
सबसे पहले, हम स्थापित करेंगे imgaug एक में पुस्तकालय अमेज़न SageMaker स्मरण पुस्तक।
अगला, हम 'IPyPlot' नाम के अजगर पैकेज को स्थापित कर सकते हैं।
फिर, हम सहित परिवर्तनों का उपयोग करके मूल छवि की छवि वृद्धि करते हैं GammaContrast
, SigmoidContrast
, तथा LinearContrast
, और छवि पर गाऊसी शोर जोड़ना।
import imageio
import imgaug as ia
import imgaug.augmenters as iaa
import ipyplot
input_img = imageio.imread('s10.png')
noise=iaa.AdditiveGaussianNoise(10,40)
input_noise=noise.augment_image(input_img)
contrast=iaa.GammaContrast((0.5, 2.0))
contrast_sig = iaa.SigmoidContrast(gain=(5, 10), cutoff=(0.4, 0.6))
contrast_lin = iaa.LinearContrast((0.6, 0.4))
input_contrast = contrast.augment_image(input_img)
sigmoid_contrast = contrast_sig.augment_image(input_img)
linear_contrast = contrast_lin.augment_image(input_img)
images_list=[input_img, input_contrast,sigmoid_contrast,linear_contrast,input_noise]
labels = ['Original', 'Gamma Contrast','SigmoidContrast','LinearContrast','Gaussian Noise Image']
ipyplot.plot_images(images_list,labels=labels,img_width=180)
चूंकि हमें कम से कम 20 सामान्य छवियों की आवश्यकता है, और अधिक बेहतर, हमने ऊपर दिखाए गए 10 परिवर्तनों में से प्रत्येक के लिए हमारे सामान्य छवि डेटासेट के रूप में 4 संवर्धित छवियां उत्पन्न की हैं। भविष्य में, हम अलग-अलग स्थानों और अलग-अलग कोणों पर स्थित होने वाली छवियों को भी बदलने की योजना बना रहे हैं ताकि प्रशिक्षित मॉडल निश्चित कैमरे के सापेक्ष वस्तु की नियुक्ति के प्रति कम संवेदनशील हो सके।
4. असामान्य छवियों की वृद्धि के लिए सिंथेटिक दोष उत्पन्न करना
इस खंड में, हम डेटासेट में विसंगतियों वाली छवियों की संख्या बढ़ाने के लिए एक सिंथेटिक दोष निर्माण पाइपलाइन प्रस्तुत करते हैं। ध्यान दें कि, पिछले अनुभाग के विपरीत जहां हम मौजूदा सामान्य नमूनों से नए सामान्य नमूने बनाते हैं, यहां हम सामान्य नमूनों से नई विसंगति वाली छवियां बनाते हैं। यह उन ग्राहकों के लिए एक आकर्षक विशेषता है जिनके डेटासेट में इस तरह की छवियों की पूरी तरह से कमी है, उदाहरण के लिए, सामान्य पीसीबी बोर्ड के एक घटक को हटाना। इस सिंथेटिक दोष उत्पन्न करने वाली पाइपलाइन के तीन चरण हैं: पहला, हम Amazon SageMaker ग्राउंड ट्रूथ का उपयोग करके स्रोत (सामान्य) छवियों से सिंथेटिक मास्क उत्पन्न करते हैं। इस पोस्ट में, हम एक विशिष्ट दोष प्रकार पर लक्षित हैं: लापता घटक। यह मुखौटा पीढ़ी एक मुखौटा छवि और एक मेनिफेस्ट फ़ाइल प्रदान करती है। दूसरा, मैनिफेस्ट फ़ाइल को संशोधित किया जाना चाहिए और एक सैजमेकर एंडपॉइंट के लिए इनपुट फ़ाइल में परिवर्तित किया जाना चाहिए। और तीसरा, इनपुट फ़ाइल एक ऑब्जेक्ट रिमूवल सेजमेकर एंडपॉइंट के लिए इनपुट है जो मास्क द्वारा दर्शाई गई सामान्य छवि के हिस्सों को हटाने के लिए जिम्मेदार है। यह समापन बिंदु परिणामी असामान्य छवि प्रदान करता है।
4.1 अमेज़ॅन सैजमेकर ग्राउंड ट्रूथ का उपयोग करके सिंथेटिक दोष मास्क उत्पन्न करें
डेटा लेबलिंग के लिए अमेज़न सैजमेकर ग्राउंड ट्रूथ
Amazon SageMaker ग्राउंड ट्रूथ एक डेटा लेबलिंग सेवा है जो डेटा को लेबल करना आसान बनाती है और आपको मानव एनोटेटर का उपयोग करने का विकल्प देती है अमेज़ॅन मैकेनिकल तुर्क, तृतीय-पक्ष विक्रेता, या आपका अपना निजी कार्यबल। आप अनुसरण कर सकते हैं इस ट्यूटोरियल एक लेबलिंग कार्य स्थापित करने के लिए।
इस खंड में, हम दिखाएंगे कि हम कैसे उपयोग करते हैं अमेज़ॅन सैजमेकर ग्राउंड ट्रुथ अगले चरण में हटाए जाने के लिए सामान्य छवियों में विशिष्ट "घटकों" को चिह्नित करने के लिए। ध्यान दें कि इस पोस्ट का एक महत्वपूर्ण योगदान यह है कि हम अमेज़न सैजमेकर ग्राउंड ट्रुथ का उपयोग इसके पारंपरिक तरीके से नहीं करते हैं (अर्थात, प्रशिक्षण छवियों को लेबल करने के लिए)। यहां, हम इसका उपयोग सामान्य छवियों में भविष्य में हटाने के लिए मास्क बनाने के लिए करते हैं। सामान्य छवियों में ये निष्कासन सिंथेटिक दोष उत्पन्न करेंगे।
इस पोस्ट के प्रयोजन के लिए, हमारे लेबलिंग कार्य में हम कृत्रिम रूप से पीसीबी बोर्ड से तीन घटकों को हटा देंगे: IC, प्रतिरोधक1, और प्रतिरोधक2। एक लेबलर के रूप में लेबलिंग कार्य में प्रवेश करने के बाद, आप लेबल नाम का चयन कर सकते हैं और उस घटक के चारों ओर किसी भी आकार का मास्क बना सकते हैं जिसे आप छवि से सिंथेटिक दोष के रूप में हटाना चाहते हैं। ध्यान दें कि आप इस प्रयोग के लिए लेबल नाम में '_' शामिल नहीं कर सकते, क्योंकि बाद में कोड में दोष नाम में भिन्न मेटाडेटा को अलग करने के लिए हम '_' का उपयोग करते हैं।
निम्नलिखित चित्र में, हम IC (इंटीग्रेटेड सर्किट) के चारों ओर एक हरा मास्क, रेसिस्टर 1 के चारों ओर एक नीला मास्क और रेसिस्टर 2 के चारों ओर एक नारंगी मास्क बनाते हैं।
हम चयन करने के बाद प्रस्तुत बटन, अमेज़ॅन सैजमेकर ग्राउंड ट्रूथ सफेद पृष्ठभूमि के साथ एक आउटपुट मास्क और एक मेनिफेस्ट फ़ाइल निम्नानुसार उत्पन्न करेगा:
{"source-ref":"s3://pcbtest22/label/s10.png","s10-label-ref":"s3://pcbtest22/label/s10-label/annotations/consolidated-annotation/output/0_2022-09-08T18:01:51.334016.png","s10-label-ref-metadata":{"internal-color-map":{"0":{"class-name":"BACKGROUND","hex-color":"#ffffff","confidence":0},"1":{"class-name":"IC","hex-color":"#2ca02c","confidence":0},"2":{"class-name":"resistor_1","hex-color":"#1f77b4","confidence":0},"3":{"class-name":"resistor_2","hex-color":"#ff7f0e","confidence":0}},"type":"groundtruth/semantic-segmentation","human-annotated":"yes","creation-date":"2022-09-08T18:01:51.498525","job-name":"labeling-job/s10-label"}}
ध्यान दें कि अब तक हमने कोई असामान्य इमेज नहीं बनाई है. हमने केवल उन तीन घटकों को चिन्हित किया है जिन्हें कृत्रिम रूप से हटा दिया जाएगा और जिनके हटाने से असामान्य छवियां उत्पन्न होंगी। बाद में, हम दोनों (1) उपरोक्त मास्क छवि का उपयोग करेंगे, और (2) मेनिफेस्ट फ़ाइल से जानकारी को असामान्य छवि निर्माण पाइपलाइन के इनपुट के रूप में उपयोग करेंगे। अगला खंड दिखाता है कि सैजमेकर एंडपॉइंट के लिए इनपुट कैसे तैयार किया जाए।
4.2 SageMaker एंडपॉइंट के लिए इनपुट तैयार करें
Amazon SageMaker ग्राउंड ट्रुथ मेनिफ़ेस्ट को SageMaker एंडपॉइंट इनपुट फ़ाइल के रूप में रूपांतरित करें
सबसे पहले, हमने एक सेट किया अमेज़न सरल भंडारण सेवा (अमेज़न S3) छवि वृद्धि पाइपलाइन के लिए सभी इनपुट और आउटपुट को स्टोर करने के लिए बकेट। पोस्ट में, हम नाम की एक S3 बकेट का उपयोग करते हैं qualityinspection
. फिर हम सभी संवर्धित सामान्य छवियां उत्पन्न करते हैं और उन्हें इस S3 बकेट में अपलोड करते हैं।
from PIL import Image
import os
import shutil
import boto3
s3=boto3.client('s3')
# make the image directory
dir_im="images"
if not os.path.isdir(dir_im):
os.makedirs(dir_im)
# create augmented images from original image
input_img = imageio.imread('s10.png')
for i in range(10):
noise=iaa.AdditiveGaussianNoise(scale=0.2*255)
contrast=iaa.GammaContrast((0.5,2))
contrast_sig = iaa.SigmoidContrast(gain=(5,20), cutoff=(0.25, 0.75))
contrast_lin = iaa.LinearContrast((0.4,1.6))
input_noise=noise.augment_image(input_img)
input_contrast = contrast.augment_image(input_img)
sigmoid_contrast = contrast_sig.augment_image(input_img)
linear_contrast = contrast_lin.augment_image(input_img)
im_noise = Image.fromarray(input_noise)
im_noise.save(f'{dir_im}/input_noise_{i}.png')
im_input_contrast = Image.fromarray(input_contrast)
im_input_contrast.save(f'{dir_im}/contrast_sig_{i}.png')
im_sigmoid_contrast = Image.fromarray(sigmoid_contrast)
im_sigmoid_contrast.save(f'{dir_im}/sigmoid_contrast_{i}.png')
im_linear_contrast = Image.fromarray(linear_contrast)
im_linear_contrast.save(f'{dir_im}/linear_contrast_{i}.png')
# move original image to image augmentation folder
shutil.move('s10.png','images/s10.png')
# list all the images in the image directory
imlist = [file for file in os.listdir(dir_im) if file.endswith('.png')]
# upload augmented images to an s3 bucket
s3_bucket='qualityinspection'
for i in range(len(imlist)):
with open('images/'+imlist[i], 'rb') as data:
s3.upload_fileobj(data, s3_bucket, 'images/'+imlist[i])
# get the image s3 locations
im_s3_list=[]
for i in range(len(imlist)):
image_s3='s3://qualityinspection/images/'+imlist[i]
im_s3_list.append(image_s3)
अगला, हम Amazon SageMaker ग्राउंड ट्रूथ से मास्क डाउनलोड करते हैं और उस S3 बकेट में 'मास्क' नाम के फ़ोल्डर में अपलोड करते हैं।
# download Ground Truth annotation mask image to local from the Ground Truth s3 folder
s3.download_file('pcbtest22', 'label/S10-label3/annotations/consolidated-annotation/output/0_2022-09-09T17:25:31.918770.png', 'mask.png')
# upload mask to mask folder
s3.upload_file('mask.png', 'qualityinspection', 'mask/mask.png')
उसके बाद, हम Amazon SageMaker ग्राउंड ट्रुथ लेबलिंग जॉब से मैनिफ़ेस्ट फ़ाइल डाउनलोड करते हैं और इसे json लाइन्स के रूप में पढ़ते हैं।
import json
#download output manifest to local
s3.download_file('pcbtest22', 'label/S10-label3/manifests/output/output.manifest', 'output.manifest')
# read the manifest file
with open('output.manifest','rt') as the_new_file:
lines=the_new_file.readlines()
for line in lines:
json_line = json.loads(line)
अंत में, हम एक इनपुट डिक्शनरी बनाते हैं जो इनपुट इमेज की S3 लोकेशन, मास्क लोकेशन, मास्क की जानकारी आदि को रिकॉर्ड करता है, इसे txt फाइल के रूप में सेव करता है, और फिर इसे टारगेट S3 बकेट 'इनपुट' फोल्डर में अपलोड करता है।
# create input dictionary
input_dat=dict()
input_dat['input-image-location']=im_s3_list
input_dat['mask-location']='s3://qualityinspection/mask/mask.png'
input_dat['mask-info']=json_line['S10-label3-ref-metadata']['internal-color-map']
input_dat['output-bucket']='qualityinspection'
input_dat['output-project']='synthetic_defect'
# Write the input as a txt file and upload it to s3 location
input_name='input.txt'
with open(input_name, 'w') as the_new_file:
the_new_file.write(json.dumps(input_dat))
s3.upload_file('input.txt', 'qualityinspection', 'input/input.txt')
निम्नलिखित एक नमूना इनपुट फ़ाइल है:
{"input-image-location": ["s3://qualityinspection/images/s10.png", ... "s3://qualityinspection/images/contrast_sig_1.png"], "mask-location": "s3://qualityinspection/mask/mask.png", "mask-info": {"0": {"class-name": "BACKGROUND", "hex-color": "#ffffff", "confidence": 0}, "1": {"class-name": "IC", "hex-color": "#2ca02c", "confidence": 0}, "2": {"class-name": "resistor1", "hex-color": "#1f77b4", "confidence": 0}, "3": {"class-name": "resistor2", "hex-color": "#ff7f0e", "confidence": 0}}, "output-bucket": "qualityinspection", "output-project": "synthetic_defect"}
4.3 लापता घटकों के साथ सिंथेटिक दोष उत्पन्न करने के लिए एसिंक्रोनस सेजमेकर एंडपॉइंट बनाएं
4.3.1 लामा मॉडल
मूल छवि से घटकों को हटाने के लिए, हम LaMa नामक एक ओपन-सोर्स PyTorch मॉडल का उपयोग कर रहे हैं लामा: फूरियर कन्वोल्यूशन के साथ रिज़ॉल्यूशन-मजबूत बड़ा मास्क इनपेंटिंग. यह सैमसंग एआई द्वारा विकसित फूरियर संकल्पों के साथ एक रिज़ॉल्यूशन-मजबूत बड़ा मुखौटा इन-पेंटिंग मॉडल है। मॉडल के लिए इनपुट एक छवि और एक काला और सफेद मुखौटा है और आउटपुट एक छवि है जिसमें मुखौटा के अंदर की वस्तुओं को हटा दिया गया है। हम मूल मास्क बनाने के लिए Amazon SageMaker ग्राउंड ट्रूथ का उपयोग करते हैं, और फिर इसे आवश्यकतानुसार एक काले और सफेद मास्क में बदल देते हैं। LaMa मॉडल एप्लिकेशन को निम्न के रूप में प्रदर्शित किया गया है:
4.3.2 पेश है Amazon SageMaker अतुल्यकालिक अनुमान
अमेज़ॅन सैजमेकर अतुल्यकालिक निष्कर्ष में एक नया निष्कर्ष विकल्प है अमेज़न SageMaker जो आने वाले अनुरोधों को कतारबद्ध करता है और उन्हें अतुल्यकालिक रूप से संसाधित करता है। अतुल्यकालिक निष्कर्ष उपयोगकर्ताओं को प्रक्रिया के लिए कोई अनुरोध नहीं होने पर इंस्टेंस गिनती को शून्य पर ऑटोस्केल करके लागत बचाने में सक्षम बनाता है। इसका अर्थ है कि आप केवल तभी भुगतान करते हैं जब आपका समापन बिंदु अनुरोधों को संसाधित कर रहा हो। नया अतुल्यकालिक अनुमान विकल्प वर्कलोड के लिए आदर्श है जहां अनुरोध का आकार बड़ा (1 जीबी तक) है और अनुमान प्रसंस्करण समय मिनटों के क्रम में है। एंडपॉइंट को तैनात और आमंत्रित करने के लिए कोड है यहाँ उत्पन्न करें.
4.3.3 समापन बिंदु परिनियोजन
अतुल्यकालिक समापन बिंदु को तैनात करने के लिए, पहले हमें प्राप्त करना होगा IAM भूमिका और कुछ पर्यावरण चर सेट अप करें।
from sagemaker import get_execution_role
from sagemaker.pytorch import PyTorchModel
import boto3
role = get_execution_role()
env = dict()
env['TS_MAX_REQUEST_SIZE'] = '1000000000'
env['TS_MAX_RESPONSE_SIZE'] = '1000000000'
env['TS_DEFAULT_RESPONSE_TIMEOUT'] = '1000000'
env['DEFAULT_WORKERS_PER_MODEL'] = '1'
जैसा कि हमने पहले बताया, हम ओपन सोर्स PyTorch मॉडल का उपयोग कर रहे हैं लामा: फूरियर कन्वोल्यूशन के साथ रिज़ॉल्यूशन-मजबूत बड़ा मास्क इनपेंटिंग और पूर्व प्रशिक्षित मॉडल को अपलोड किया गया है s3://qualityinspection/model/big-lama.tar.gz
। image_uri
आवश्यक ढांचे और अजगर संस्करणों के साथ एक डॉकटर कंटेनर की ओर इशारा करता है।
model = PyTorchModel(
entry_point="./inference_defect_gen.py",
role=role,
source_dir = './',
model_data='s3://qualityinspection/model/big-lama.tar.gz',
image_uri = '763104351884.dkr.ecr.us-west-2.amazonaws.com/pytorch-inference:1.11.0-gpu-py38-cu113-ubuntu20.04-sagemaker',
framework_version="1.7.1",
py_version="py3",
env = env,
model_server_workers=1
)
फिर, समापन बिंदु कॉन्फ़िगरेशन बनाते समय हमें अतिरिक्त अतुल्यकालिक निष्कर्ष विशिष्ट कॉन्फ़िगरेशन पैरामीटर निर्दिष्ट करना होगा।
from sagemaker.async_inference.async_inference_config import AsyncInferenceConfig
bucket = 'qualityinspection'
prefix = 'async-endpoint'
async_config = AsyncInferenceConfig(output_path=f"s3://{bucket}/{prefix}/output",max_concurrent_invocations_per_instance=10)
अगला, हम निम्नलिखित कोड को चलाकर एक ml.g4dn.xlarge उदाहरण पर समापन बिंदु को परिनियोजित करते हैं:
predictor = model.deploy(
initial_instance_count=1,
instance_type='ml.g4dn.xlarge',
model_server_workers=1,
async_inference_config=async_config
)
लगभग 6-8 मिनट के बाद, समापन बिंदु सफलतापूर्वक बनाया जाता है, और यह SageMaker कंसोल में दिखाई देगा।
4.3.4 समापन बिंदु को आमंत्रित करें
अगला, हम उस इनपुट txt फ़ाइल का उपयोग करते हैं जिसे हमने पहले एंडपॉइंट के इनपुट के रूप में जेनरेट किया था और निम्नलिखित कोड का उपयोग करके एंडपॉइंट को इनवॉइस करते हैं:
import boto3
runtime= boto3.client('runtime.sagemaker')
response = runtime.invoke_endpoint_async(EndpointName='pytorch-inference-2022-09-16-02-04-37-888',
InputLocation='s3://qualityinspection/input/input.txt')
उपरोक्त आदेश तुरंत निष्पादन समाप्त कर देगा। हालाँकि, अनुमान कई मिनटों तक जारी रहेगा जब तक कि यह सभी कार्यों को पूरा नहीं कर लेता है और S3 बकेट में सभी आउटपुट वापस नहीं कर देता है।
4.3.5 समापन बिंदु के निष्कर्ष परिणाम की जाँच करें
समापन बिंदु का चयन करने के बाद, आप मॉनिटर सत्र देखेंगे। कंसोल में अनुमान परिणाम देखने के लिए 'लॉग देखें' चुनें।
लॉग स्ट्रीम में दो लॉग रिकॉर्ड दिखाई देंगे। जिसका नाम है data-log
अंतिम निष्कर्ष परिणाम दिखाएगा, जबकि अन्य लॉग रिकॉर्ड अनुमान का विवरण दिखाएगा, जो आमतौर पर डिबग उद्देश्यों के लिए उपयोग किया जाता है।
यदि निष्कर्ष अनुरोध सफल होता है, तो आपको संदेश दिखाई देगा: Inference request succeeded.
डेटा-लॉग में और संदेश में कुल मॉडल विलंबता, कुल प्रक्रिया समय आदि की जानकारी भी प्राप्त करें। यदि अनुमान विफल हो जाता है, तो डीबग करने के लिए अन्य लॉग की जाँच करें। आप अनुमान अनुरोध की स्थिति को पोल करके भी परिणाम देख सकते हैं। Amazon SageMaker अतुल्यकालिक अनुमान के बारे में अधिक जानें यहाँ उत्पन्न करें.
4.3.6 समापन बिंदु का उपयोग करके लापता घटकों के साथ सिंथेटिक दोष उत्पन्न करना
हम समापन बिंदु में चार कार्य पूरे करेंगे:
- मॉडल प्रदर्शन को अनुकूलित करने के लिए लुकआउट फॉर विजन विसंगति स्थानीयकरण सेवा को प्रशिक्षण डेटासेट में प्रति छवि एक दोष की आवश्यकता होती है। इसलिए, हमें रंग फ़िल्टरिंग द्वारा समापन बिंदु में विभिन्न दोषों के लिए मास्क को अलग करना चाहिए।
- निम्नलिखित आवश्यकता को पूरा करने के लिए स्प्लिट ट्रेन/टेस्ट डेटासेट:
- ट्रेन डेटासेट के लिए कम से कम 10 सामान्य चित्र और 10 विसंगतियाँ
- ट्रेन डेटासेट में एक दोष/छवि
- परीक्षण डेटासेट के लिए कम से कम 10 सामान्य छवियां और 10 विसंगतियां
- परीक्षण डेटासेट के लिए प्रति छवि एकाधिक दोषों की अनुमति है
- सिंथेटिक दोष उत्पन्न करें और उन्हें लक्ष्य S3 स्थानों पर अपलोड करें।
हम ट्रेन डेटासेट के लिए प्रति छवि एक दोष और प्रति वर्ग 20 से अधिक दोष उत्पन्न करते हैं, साथ ही प्रति छवि 1-3 दोष और परीक्षण डेटासेट के लिए प्रति वर्ग 20 से अधिक दोष उत्पन्न करते हैं।
निम्नलिखित तीन घटकों के साथ स्रोत छवि और उसके सिंथेटिक दोषों का एक उदाहरण है: आईसी, प्रतिरोधक1 और प्रतिरोधक 2 गायब।
मूल छवि
40_im_mask_IC_resistor1_resistor2.jpg (दोष नाम लापता घटकों को इंगित करता है)
- उपरोक्त सभी सूचनाओं को रिकॉर्ड करने वाली ट्रेन/परीक्षण डेटासेट के लिए मैनिफ़ेस्ट फ़ाइल जनरेट करें।
अंत में, हम जानकारी रिकॉर्ड करने के लिए ट्रेन/परीक्षण मेनिफेस्ट तैयार करेंगे, जैसे सिंथेटिक दोष S3 स्थान, मास्क S3 स्थान, दोष वर्ग, मुखौटा रंग, आदि।
मेनिफ़ेस्ट में एक विसंगति और एक सामान्य छवि के लिए नमूना json पंक्तियाँ निम्नलिखित हैं।
विसंगति के लिए:
{"source-ref": "s3://qualityinspection/synthetic_defect/anomaly/train/6_im_mask_IC.jpg", "auto-label": 11, "auto-label-metadata": {"class-name": "anomaly", "type": "groundtruth/image-classification"}, "anomaly-mask-ref": "s3://qualityinspection/synthetic_defect/mask/MixMask/mask_IC.png", "anomaly-mask-ref-metadata": {"internal-color-map": {"0": {"class-name": "IC", "hex-color": "#2ca02c", "confidence": 0}}, "type": "groundtruth/semantic-segmentation"}}
सामान्य छवि के लिए:
{"source-ref": "s3://qualityinspection/synthetic_defect/normal/train/25_im.jpg", "auto-label": 12, "auto-label-metadata": {"class-name": "normal", "type": "groundtruth/image-classification"}}
4.3.7 अमेज़न S3 फ़ोल्डर संरचना
समापन बिंदु के इनपुट और आउटपुट को निम्न संरचना में लक्ष्य S3 बाल्टी में संग्रहीत किया जाता है:
5 विजन मॉडल प्रशिक्षण और परिणाम की तलाश
5.1 प्रोजेक्ट सेट अप करें, डेटासेट अपलोड करें और मॉडल ट्रेनिंग शुरू करें.
- सबसे पहले, आप से लुकआउट फॉर विज़न पर जा सकते हैं AWS कंसोल और एक प्रोजेक्ट बनाएं।
- फिर, आप चुनकर एक प्रशिक्षण डाटासेट बना सकते हैं सेजमेकर ग्राउंड ट्रुथ द्वारा लेबल किए गए चित्र आयात करें और SageMaker समापन बिंदु द्वारा उत्पन्न ट्रेन डेटासेट मेनिफेस्ट का Amazon S3 स्थान दें।
- अगला, आप चुनकर एक परीक्षण डेटासेट बना सकते हैं सेजमेकर ग्राउंड ट्रुथ द्वारा लेबल किए गए चित्र आयात करें फिर से, और SageMaker समापन बिंदु द्वारा उत्पन्न परीक्षण डेटासेट मेनिफ़ेस्ट का Amazon S3 स्थान दें।
.......
....
- ट्रेन और परीक्षण डेटासेट सफलतापूर्वक अपलोड होने के बाद, आप चयन कर सकते हैं ट्रेन का मॉडल विसंगति स्थानीयकरण मॉडल प्रशिक्षण को ट्रिगर करने के लिए ऊपरी दाएं कोने में बटन।
......
- हमारे प्रयोग में, प्रशिक्षण पूरा करने में मॉडल को एक घंटे से थोड़ा अधिक समय लगा। जब स्थिति प्रशिक्षण पूर्ण दिखाती है, तो आप परिणाम देखने के लिए मॉडल लिंक का चयन कर सकते हैं।
....
5.2 मॉडल प्रशिक्षण परिणाम
5.2.1 मॉडल प्रदर्शन मेट्रिक्स
में चयन करने के बाद मॉडल 1 जैसा कि ऊपर दिखाया गया है, हम 100% सटीकता, 100% रिकॉल और 100% F1 स्कोर से देख सकते हैं कि मॉडल का प्रदर्शन काफी अच्छा है। हम प्रति लेबल प्रदर्शन (घटक गायब) भी जांच सकते हैं, और हमें यह जानकर खुशी होगी कि तीनों लेबलों का F1 स्कोर 93% से ऊपर है, और औसत IoU 85% से ऊपर है। यह परिणाम इस छोटे डेटासेट के लिए संतोषजनक है जिसे हमने पोस्ट में प्रदर्शित किया था।
5.2.2 परीक्षण डेटासेट में सिंथेटिक दोषों का पता लगाने का विज़ुअलाइज़ेशन।
जैसा कि निम्न छवि दिखाती है, प्रत्येक छवि एक के रूप में खराब हो जाएगी normal
or anomaly
आत्मविश्वास स्कोर के साथ लेबल करें। यदि यह एक विसंगति है, तो यह छवि में असामान्य क्षेत्र पर प्रत्येक दोष प्रकार के लिए एक अलग रंग के साथ एक मुखौटा दिखाएगा।
परीक्षण डेटासेट में संयुक्त लापता घटकों (इस मामले में तीन दोष) का एक उदाहरण निम्नलिखित है:
आगे आप मॉडल को एक के रूप में संकलित और पैकेज कर सकते हैं AWS IoT ग्रीनग्रास घटक इस पोस्ट में निर्देशों के बाद, GPU का उपयोग किए बिना किनारे पर Amazon Lookout for Vision का उपयोग करके विसंगतियों के स्थान की पहचान करें, और मॉडल पर अनुमान चलाएँ।
6. वास्तविक दोषों के खिलाफ सिंथेटिक डेटा पर प्रशिक्षित लुकआउट फॉर विजन मॉडल का परीक्षण करें
यह जांचने के लिए कि क्या सिंथेटिक दोष पर प्रशिक्षित मॉडल वास्तविक दोषों के विरुद्ध अच्छा प्रदर्शन कर सकता है, हमने एक डेटासेट (एलियंस-डेटासेट) चुना यहाँ उत्पन्न करें एक प्रयोग चलाने के लिए।
सबसे पहले, हम उत्पन्न सिंथेटिक दोष और वास्तविक दोष की तुलना करते हैं। बाईं छवि एक गायब सिर के साथ एक वास्तविक दोष है, और दाईं छवि एक एमएल मॉडल का उपयोग करके हटाए गए सिर के साथ उत्पन्न दोष है।
वास्तविक दोष
|
सिंथेटिक दोष
|
दूसरा, हम वास्तविक दोष के खिलाफ मॉडल का परीक्षण करने के लिए लुकआउट फॉर विजन में ट्रायल डिटेक्शन का उपयोग करते हैं। आप या तो परीक्षण छवियों को S3 बकेट में सहेज सकते हैं और उन्हें Amazon S3 से आयात कर सकते हैं या अपने कंप्यूटर से चित्र अपलोड कर सकते हैं। फिर, चयन करें विसंगतियों का पता लगाएं पता लगाने को चलाने के लिए।
अंत में, आप वास्तविक दोष का पूर्वानुमान परिणाम देख सकते हैं। सिंथेटिक दोषों पर प्रशिक्षित मॉडल इस प्रयोग में वास्तविक दोष को सटीक रूप से दोष दे सकता है।
सिंथेटिक दोषों पर प्रशिक्षित मॉडल हमेशा वास्तविक दोषों पर अच्छा प्रदर्शन नहीं कर सकता है, विशेष रूप से सर्किट बोर्ड जो इस नमूना डेटासेट से कहीं अधिक जटिल हैं। यदि आप वास्तविक दोष वाले मॉडल को फिर से प्रशिक्षित करना चाहते हैं, तो आप लेबल वाले नारंगी बटन का चयन कर सकते हैं मशीन की भविष्यवाणी सत्यापित करें भविष्यवाणी परिणाम के ऊपरी दाएं कोने में, और फिर इसे इस रूप में जांचें सही बात or ग़लत.
फिर आप मॉडल प्रदर्शन को बढ़ाने के लिए ऊपरी दाएं कोने में नारंगी बटन का चयन करके प्रशिक्षण डेटासेट में सत्यापित छवि और लेबल जोड़ सकते हैं।
7. लागत अनुमान
लुकआउट फॉर विज़न के लिए यह छवि वृद्धि पाइपलाइन बहुत ही किफायती है। ऊपर दिखाए गए उदाहरण में, Amazon SageMaker ग्राउंड ट्रूथ लेबलिंग, Amazon SageMaker नोटबुक, और SageMaker एसिंक्रोनस एंडपॉइंट परिनियोजन और अनुमान केवल कुछ डॉलर खर्च करते हैं। लुकआउट फ़ॉर विज़न सेवा के लिए, आप केवल उसी चीज़ का भुगतान करते हैं जिसका आप उपयोग करते हैं। तीन घटक हैं जो आपके बिल को निर्धारित करते हैं: मॉडल के प्रशिक्षण के लिए शुल्क (प्रशिक्षण घंटे), क्लाउड पर विसंगतियों का पता लगाने के लिए शुल्क (बादल अनुमान घंटे), और/या किनारे पर विसंगतियों का पता लगाने के लिए शुल्क (एज अनुमान इकाइयां)। हमारे प्रयोग में, लुकआउट फॉर विज़न मॉडल को प्रशिक्षण पूरा करने में एक घंटे से थोड़ा अधिक समय लगा, और इसकी लागत $2.00 प्रति प्रशिक्षण घंटे थी। इसके अलावा, आप सूचीबद्ध मूल्य के साथ क्लाउड या किनारे पर अनुमान लगाने के लिए प्रशिक्षित मॉडल का उपयोग कर सकते हैं यहाँ उत्पन्न करें.
8. साफ करें
अनावश्यक शुल्क लगाने से बचने के लिए, पोस्ट में अभ्यास चलाते समय आपके द्वारा बनाए गए एंडपॉइंट और संसाधनों को हटाने के लिए कंसोल का उपयोग करें।
- SageMaker कंसोल खोलें और निम्न संसाधनों को हटाएं:
- समापन बिंदु। एंडपॉइंट को हटाने से एमएल कंप्यूट इंस्टेंस या इसका समर्थन करने वाले इंस्टेंसेस को भी हटा दिया जाता है।
- के अंतर्गत अनुमान, चुनें endpoints.
- वह समापन बिंदु चुनें जिसे आपने उदाहरण में बनाया था, चुनें क्रियाएँ, और उसके बाद चुनें मिटाना.
- समापन बिंदु विन्यास।
- के अंतर्गत अनुमान, चुनें समापन बिंदु विन्यास.
- उदाहरण में आपके द्वारा बनाए गए एंडपॉइंट कॉन्फ़िगरेशन को चुनें, चुनें क्रियाएँ, और उसके बाद चुनें मिटाना.
- आदर्श।
- के अंतर्गत अनुमान, चुनें मॉडल.
- वह मॉडल चुनें जिसे आपने उदाहरण में बनाया था, चुनें क्रियाएँ, और उसके बाद चुनें मिटाना.
- नोटबुक उदाहरण। नोटबुक इंस्टेंस को हटाने से पहले, इसे रोकें।
- के अंतर्गत नोटबुक, चुनें नोटबंदी के उदाहरण.
- वह नोटबुक उदाहरण चुनें जिसे आपने उदाहरण में बनाया था, चुनें क्रियाएँ, और उसके बाद चुनें रुकें. नोटबुक आवृत्ति को रुकने में कई मिनट लगते हैं. जब स्थिति में परिवर्तन रोक, अगले कदम पर आगे बढ़ें।
- चुनें क्रियाएँ, और उसके बाद चुनें मिटाना.
- ओपन अमेज़न S3 कंसोल, और फिर उस बकेट को हटा दें जिसे आपने मॉडल कलाकृतियों और प्रशिक्षण डेटासेट को संग्रहीत करने के लिए बनाया था।
- ओपन अमेज़न क्लाउडवॉच कंसोल, और फिर उन सभी लॉग समूहों को हटा दें जिनके नाम से शुरू होते हैं
/aws/sagemaker/
.
आप निम्न कोड चलाकर भी SageMaker नोटबुक से समापन बिंदु को हटा सकते हैं:
import boto3
sm_boto3 = boto3.client("sagemaker")
sm_boto3.delete_endpoint(EndpointName='endpoint name')
9. निष्कर्ष
इस पोस्ट में, हमने प्रदर्शित किया कि कैसे Amazon SageMaker ग्राउंड ट्रूथ का उपयोग करके सिंथेटिक दोष मास्क को एनोटेट किया जाए, एक सामान्य छवि को सामान्य छवियों की वांछित संख्या में बदलने के लिए विभिन्न छवि संवर्द्धन तकनीकों का उपयोग कैसे किया जाए, एक अतुल्यकालिक SageMaker समापन बिंदु बनाएं और इसके लिए इनपुट फ़ाइल तैयार करें। एंडपॉइंट, साथ ही एंडपॉइंट का आह्वान करें। अंत में, हमने यह प्रदर्शित किया कि दृष्टि विसंगति स्थानीयकरण मॉडल के लिए लुकआउट को प्रशिक्षित करने के लिए ट्रेन/परीक्षण मेनिफेस्ट का उपयोग कैसे करें। सिंथेटिक दोष उत्पन्न करने के लिए इस प्रस्तावित पाइपलाइन को अन्य एमएल मॉडल तक बढ़ाया जा सकता है, और आपको बस इतना करना है कि सैजमेकर समापन बिंदु में मॉडल और अनुमान कोड को अनुकूलित करना है।
स्वचालित गुणवत्ता निरीक्षण के लिए लुकआउट फॉर विज़न की खोज करके प्रारंभ करें यहाँ उत्पन्न करें.
लेखक के बारे में
कारा यांगो AWS प्रोफेशनल सर्विसेज में डेटा साइंटिस्ट हैं। वह ग्राहकों को एडब्ल्यूएस क्लाउड सेवाओं के साथ अपने व्यावसायिक लक्ष्यों को प्राप्त करने में मदद करने के बारे में भावुक हैं और उन्होंने संगठनों को विनिर्माण, ऑटोमोटिव, पर्यावरणीय स्थिरता और एयरोस्पेस जैसे कई उद्योगों में एंड टू एंड एआई/एमएल समाधान बनाने में मदद की है।
ओक्टावी ओबियोल्स-सेल्स एक कम्प्यूटेशनल वैज्ञानिक है जो डीप लर्निंग (डीएल) और मशीन लर्निंग में विशेषज्ञता प्राप्त है और एक सहयोगी समाधान वास्तुकार के रूप में प्रमाणित है। क्लाउड और एज दोनों में व्यापक ज्ञान के साथ, वह एंड-टू-एंड एआई समाधानों के निर्माण के माध्यम से व्यावसायिक परिणामों में तेजी लाने में मदद करता है। ओक्टावी ने कैलिफोर्निया विश्वविद्यालय, इरविन में कम्प्यूटेशनल साइंस में पीएचडी अर्जित की, जहां उन्होंने डीएल+एचपीसी एल्गोरिदम में अत्याधुनिक को बढ़ावा दिया।
फैबियन बेनिटेज़-क्विरोज़ AWS प्रोफेशनल सर्विसेज में IoT एज डेटा साइंटिस्ट हैं। उन्होंने ओहियो स्टेट यूनिवर्सिटी से कंप्यूटर विजन और पैटर्न रिकग्निशन में पीएचडी की है। Fabian ग्राहकों को IoT उपकरणों और क्लाउड में कम विलंबता के साथ अपने मशीन लर्निंग मॉडल चलाने में मदद करने में शामिल है।
मनीष तलरेजा AWS में IoT Solutions के लिए प्रधान उत्पाद प्रबंधक हैं। उन्हें क्लाउड और एज में AWS IoT और ML सेवाओं का उपयोग करके ग्राहकों को अभिनव समाधान बनाने में मदद करने का शौक है।
यक्सिन यांग AWS में एक AI/ML वास्तुकार है, जो AWS मशीन लर्निंग स्पेशलिटी में प्रमाणित है। वह भविष्य कहनेवाला रखरखाव, कंप्यूटर दृष्टि और सुदृढीकरण सीखने सहित एंड-टू-एंड एआई / एमएल समाधानों के निर्माण के माध्यम से ग्राहकों को अपने परिणामों में तेजी लाने में सक्षम बनाती है। युक्सिन ने स्टैनफोर्ड विश्वविद्यालय से एमएस अर्जित किया, जहां उन्होंने गहन शिक्षा और बड़े डेटा विश्लेषण पर ध्यान केंद्रित किया।
यिंगमाओ टिमोथी ली AWS के साथ डेटा साइंटिस्ट हैं। वह 11 महीने पहले AWS में शामिल हुए हैं और ग्राहकों के विविध सेट के लिए समाधान बनाने के लिए सेवाओं और मशीन लर्निंग तकनीकों की एक विस्तृत श्रृंखला के साथ काम करते हैं। उन्होंने इलेक्ट्रिकल इंजीनियरिंग में पीएचडी की है। अपने खाली समय में, वह बाहरी खेलों, कार रेसिंग, तैराकी और देश को पार करने और आकाश का पता लगाने के लिए पाइपर शावक को उड़ाने का आनंद लेता है।