ভূমিকা
অবজেক্ট ডিটেকশন হল কম্পিউটার ভিশনের একটি বৃহৎ ক্ষেত্র, এবং কম্পিউটার ভিশনের অন্যতম গুরুত্বপূর্ণ অ্যাপ্লিকেশন "বন্যে"। এটি থেকে, কীপয়েন্ট সনাক্তকরণ (প্রায়শই পোজ অনুমানের জন্য ব্যবহৃত হয়) বের করা হয়েছিল।
কীপয়েন্টগুলি বিভিন্ন বিন্দু হতে পারে - একটি মুখের অংশ, একটি শরীরের অঙ্গপ্রত্যঙ্গ ইত্যাদি। ভঙ্গি অনুমান হল কীপয়েন্ট সনাক্তকরণের একটি বিশেষ ক্ষেত্রে - যেখানে পয়েন্টগুলি একটি মানব দেহের অংশ।
ভঙ্গি অনুমান কম্পিউটার দৃষ্টির একটি আশ্চর্যজনক, অত্যন্ত মজাদার এবং ব্যবহারিক ব্যবহার। এটির সাহায্যে, আমরা ভঙ্গি (মোশন ক্যাপচার স্যুট) অনুমান করার জন্য ব্যবহৃত হার্ডওয়্যারগুলি দূর করতে পারি, যা ব্যয়বহুল এবং অপ্রত্যাশিত। উপরন্তু, আমরা ইউক্লিডীয় মহাকাশে রোবটগুলির গতিবিধির সাথে মানুষের গতিবিধি ম্যাপ করতে পারি, কন্ট্রোলার ব্যবহার না করেই সূক্ষ্ম নির্ভুল মোটর চলাচল সক্ষম করে, যা সাধারণত উচ্চ স্তরের নির্ভুলতার জন্য অনুমতি দেয় না। কীপয়েন্ট অনুমান AR এবং VR-এ 3D মডেলে আমাদের গতিবিধি অনুবাদ করতে ব্যবহার করা যেতে পারে, এবং ক্রমবর্ধমানভাবে শুধুমাত্র একটি ওয়েবক্যামের মাধ্যমে এটি করার জন্য ব্যবহার করা হচ্ছে। পরিশেষে - ভঙ্গি অনুমান আমাদের খেলাধুলা এবং নিরাপত্তায় সাহায্য করতে পারে।
এই গাইডে, আমরা অত্যাধুনিক YOLOv7 মডেল ব্যবহার করে পাইথনের একটি ভিডিও থেকে রিয়েল-টাইম পোজ অনুমান সম্পাদন করব।
বিশেষত, আমরা দক্ষিণ কোরিয়ার পিয়ংচাং-এ অনুষ্ঠিত 2018 সালের শীতকালীন অলিম্পিকের একটি ভিডিও নিয়ে কাজ করব:
Aljona Savchenko এবং Bruno Massot ক্যামেরার বিপরীতে ওভারল্যাপিং বডি, দ্রুত তরল চলাচল এবং বাতাসে ঘোরানো সহ একটি আশ্চর্যজনক পারফরম্যান্স করেছিলেন। মডেলটি কীভাবে অনুমান করা কঠিন পরিস্থিতি পরিচালনা করে তা দেখার এটি একটি আশ্চর্যজনক সুযোগ হবে!
YOLO এবং পোজ অনুমান
YOLO (আপনি শুধুমাত্র একবার দেখুন) একটি পদ্ধতি, সেইসাথে বস্তু সনাক্তকরণের জন্য নির্মিত মডেলের পরিবার। 2015 সালে সূচনা হওয়ার পর থেকে, YOLOv1, YOLOv2 (YOLO9000) এবং YOLOv3 একই লেখক(রা) দ্বারা প্রস্তাবিত হয়েছে – এবং গভীর শিক্ষার সম্প্রদায় অব্যাহত বছরগুলিতে ওপেন সোর্সড অগ্রগতি অব্যাহত রেখেছে।
Ultralytics' YOLOv5 YOLO পদ্ধতির উপরে নির্মিত একটি শিল্প-গ্রেড অবজেক্ট ডিটেকশন রিপোজিটরি। এটি PyTorch-এ বাস্তবায়িত হয়েছে, পূর্ববর্তী YOLO মডেলগুলির জন্য C++ এর বিপরীতে, এটি সম্পূর্ণরূপে ওপেন সোর্স, এবং এটির একটি সুন্দর সহজ এবং শক্তিশালী API রয়েছে যা আপনাকে নমনীয়ভাবে প্রকল্পটি অনুমান, প্রশিক্ষণ এবং কাস্টমাইজ করতে দেয়। এটি এমন একটি প্রধান বিষয় যে YOLO পদ্ধতির উন্নতির জন্য বেশিরভাগ নতুন প্রচেষ্টা এটির উপরে তৈরি হয়।
এই হল কিভাবে YOLOR (আপনি শুধুমাত্র একটি প্রতিনিধিত্ব শিখুন) এবং YOLOv7 যা YOLOR (একই লেখক) এর উপরে তৈরি করা হয়েছিল!
YOLOv7 শুধুমাত্র একটি অবজেক্ট ডিটেকশন আর্কিটেকচার নয় - এটি নতুন মডেল হেড প্রদান করে, যা কীপয়েন্ট (কঙ্কাল) আউটপুট করতে পারে এবং শুধুমাত্র বাউন্ডিং বক্স রিগ্রেশন ছাড়াও ইনস্ট্যান্স সেগমেন্টেশন করতে পারে, যা পূর্ববর্তী YOLO মডেলের সাথে মানসম্মত ছিল না। এটা আশ্চর্যজনক কিছু নয়, যেহেতু অনেক অবজেক্ট ডিটেকশন আর্কিটেকচার আগেও উদাহরণ সেগমেন্টেশন এবং কীপয়েন্ট ডিটেকশন টাস্কের জন্য পুনরুজ্জীবিত করা হয়েছিল, শেয়ার করা সাধারণ আর্কিটেকচারের কারণে, টাস্কের উপর নির্ভর করে বিভিন্ন আউটপুট সহ।
যদিও এটি আশ্চর্যজনক নয় - সমর্থনকারী উদাহরণ বিভাজন এবং কীপয়েন্ট সনাক্তকরণ সম্ভবত YOLO-ভিত্তিক মডেলগুলির জন্য নতুন মান হয়ে উঠবে, যা কয়েক বছর আগে নির্ভুলতা এবং গতি উভয়ের ক্ষেত্রে কার্যত অন্য সমস্ত দ্বি-পর্যায়ের ডিটেক্টরকে ছাড়িয়ে যেতে শুরু করেছে।
এটি ইন্সট্যান্স সেগমেন্টেশন এবং কীপয়েন্ট সনাক্তকরণকে আগের চেয়ে দ্রুততর করে তোলে, দ্বি-পর্যায়ের ডিটেক্টরের চেয়ে সহজ আর্কিটেকচারের সাথে।
মডেলটি নিজেই স্থাপত্য পরিবর্তনের মাধ্যমে তৈরি করা হয়েছিল, সেইসাথে প্রশিক্ষণের অপ্টিমাইজিং দিকগুলিকে "ব্যাগ-অফ-ফ্রিবিস" হিসাবে ডাকা হয়েছে, যা অনুমান খরচ না বাড়িয়ে নির্ভুলতা বাড়িয়েছে।
YOLOv7 ইনস্টল করা হচ্ছে
সোর্স কোডটি পেতে রিপোজিটরি ক্লোন করে শুরু করা যাক:
! git clone https://github.com/WongKinYiu/yolov7.git
এখন, এর মধ্যে সরানো যাক yolov7
ডিরেক্টরি, যা প্রকল্প ধারণ করে, এবং বিষয়বস্তু একবার দেখুন:
%cd yolov7
!ls
/content/yolov7
cfg figure output.mp4 test.py
data hubconf.py paper tools
deploy inference README.md train_aux.py
detect.py LICENSE.md requirements.txt train.py
export.py models scripts utils
বিঃদ্রঃ: কল করা হচ্ছে !cd dirname
আপনাকে সেই ঘরে একটি ডিরেক্টরিতে নিয়ে যায়। কলিং %cd dirname
সেইসাথে আসন্ন কোষ জুড়ে একটি ডিরেক্টরিতে আপনাকে নিয়ে যায় এবং আপনাকে সেখানে রাখে।
এখন, YOLO একটি অবজেক্ট ডিটেক্টর হতে বোঝানো হয়েছে, এবং ডিফল্টভাবে পোজ অনুমান ওজনের সাথে পাঠানো হয় না। আমরা ওজনগুলি ডাউনলোড করতে চাই এবং তাদের থেকে একটি কংক্রিট মডেলের উদাহরণ লোড করতে চাই। ওজনগুলি একই GitHub সংগ্রহস্থলে উপলব্ধ, এবং সহজে CLI এর মাধ্যমেও ডাউনলোড করা যেতে পারে:
! curl -L https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-w6-pose.pt -o yolov7-w6-pose.pt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 153M 100 153M 0 0 23.4M 0 0:00:06 0:00:06 --:--:-- 32.3M
একবার ডাউনলোড হয়ে গেলে, আমরা যে লাইব্রেরিগুলি এবং সাহায্যকারী পদ্ধতিগুলি ব্যবহার করব তা আমদানি করতে পারি:
import torch
from torchvision import transforms
from utils.datasets import letterbox
from utils.general import non_max_suppression_kpt
from utils.plots import output_to_keypoint, plot_skeleton_kpts
import matplotlib.pyplot as plt
import cv2
import numpy as np
সেরা-অভ্যাস, শিল্প-স্বীকৃত মান এবং অন্তর্ভুক্ত চিট শীট সহ গিট শেখার জন্য আমাদের হ্যান্ডস-অন, ব্যবহারিক গাইড দেখুন। গুগলিং গিট কমান্ড এবং আসলে বন্ধ করুন শেখা এটা!
দারুণ! চলুন মডেলটি লোড করা এবং একটি স্ক্রিপ্ট তৈরি করা যাক যা আপনাকে YOLOv7 এবং OpenCV সহ ভিডিওগুলি থেকে পোজ অনুমান করতে দেয়৷
YOLOv7 এর সাথে রিয়েল-টাইম পোজ অনুমান
প্রথমে ডাউনলোড করা ওজন থেকে মডেল লোড করার জন্য একটি পদ্ধতি তৈরি করা যাক। আমরা কি ডিভাইস উপলব্ধ আছে তা পরীক্ষা করব (CPU বা GPU):
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
def load_model():
model = torch.load('yolov7-w6-pose.pt', map_location=device)['model']
model.float().eval()
if torch.cuda.is_available():
model.half().to(device)
return model
model = load_model()
আমাদের একটি GPU আছে কি না তার উপর নির্ভর করে, আমরা অর্ধ-নির্ভুলতা চালু করব (ব্যবহার করে float16
পরিবর্তে float32
অপারেশনে), যা অনুমানকে উল্লেখযোগ্যভাবে দ্রুত করে তোলে। মনে রাখবেন যে এটি একটি GPU-তে রিয়েল-টাইম গতির জন্য এটি সম্পাদন করার জন্য অত্যন্ত উৎসাহিত, কারণ ছোট ভিডিওতে না চললে CPU-তে এটি করার ক্ষমতার অভাব হবে।
চলুন অনুমান চালানোর জন্য একটি convinience পদ্ধতি লিখুন. আমরা ছবিগুলিকে NumPy অ্যারে হিসাবে গ্রহণ করব (যেহেতু ভিডিওটি পড়ার সময় আমরা সেগুলিকে পাস করব)। প্রথমত, ব্যবহার করে letterbox()
ফাংশন - আমরা ভিডিওটিকে আকার পরিবর্তন করব এবং প্যাড করব এমন একটি আকারে যা মডেলটি কাজ করতে পারে। এটি ফলাফল ভিডিওর আকার (রেজোলিউশন) হওয়ার দরকার নেই এবং হবে না!
তারপর, আমরা রূপান্তরগুলি প্রয়োগ করব, চিত্রটিকে অর্ধেক নির্ভুলতায় রূপান্তর করব (যদি একটি জিপিইউ উপলব্ধ থাকে), এটি ব্যাচ করুন এবং মডেলের মাধ্যমে এটি চালান:
def run_inference(image):
image = letterbox(image, 960, stride=64, auto=True)[0]
image = transforms.ToTensor()(image)
if torch.cuda.is_available():
image = image.half().to(device)
image = image.unsqueeze(0)
with torch.no_grad():
output, _ = model(image)
return output, image
আমরা মডেলের ভবিষ্যদ্বাণী, সেইসাথে একটি টেনসর হিসাবে চিত্রটি ফেরত দেব। এগুলি হল "রুক্ষ" ভবিষ্যদ্বাণী - এতে অনেকগুলি অ্যাক্টিভেশন রয়েছে যা ওভারল্যাপ করে, এবং আমরা নন-ম্যাক্স সাপ্রেশন ব্যবহার করে "এগুলি পরিষ্কার" করতে চাই এবং চিত্রের উপরেই পূর্বাভাসিত কঙ্কালগুলি প্লট করতে চাই:
def draw_keypoints(output, image):
output = non_max_suppression_kpt(output,
0.25,
0.65,
nc=model.yaml['nc'],
nkpt=model.yaml['nkpt'],
kpt_label=True)
with torch.no_grad():
output = output_to_keypoint(output)
nimg = image[0].permute(1, 2, 0) * 255
nimg = nimg.cpu().numpy().astype(np.uint8)
nimg = cv2.cvtColor(nimg, cv2.COLOR_RGB2BGR)
for idx in range(output.shape[0]):
plot_skeleton_kpts(nimg, output[idx, 7:].T, 3)
return nimg
এগুলোর সাথে, আমাদের সাধারণ প্রবাহটি এরকম দেখাবে:
img = read_img()
outputs, img = run_inference(img)
keypoint_img = draw_keypoints(output, img)
এটিকে একটি রিয়েল-টাইম ভিডিও সেটিং-এ অনুবাদ করতে - আমরা একটি ভিডিও পড়ার জন্য OpenCV ব্যবহার করব এবং প্রতিটি ফ্রেমের জন্য এই প্রক্রিয়াটি চালাব৷ প্রতিটি ফ্রেমে, আমরা ফ্রেমটিকে একটি ভিডিও হিসাবে এনকোড করা একটি নতুন ফাইলে লিখব। এটি অগত্যা প্রক্রিয়াটিকে ধীর করে দেবে কারণ আমরা অনুমানটি চালাচ্ছি, এটি প্রদর্শন করছি এবং লিখছি – যাতে আপনি একটি নতুন ফাইল তৈরি করা এড়িয়ে এবং লুপে লিখে অনুমান এবং প্রদর্শনের গতি বাড়াতে পারেন:
def pose_estimation_video(filename):
cap = cv2.VideoCapture(filename)
fourcc = cv2.VideoWriter_fourcc(*'MP4V')
out = cv2.VideoWriter('ice_skating_output.mp4', fourcc, 30.0, (int(cap.get(3)), int(cap.get(4))))
while cap.isOpened():
(ret, frame) = cap.read()
if ret == True:
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
output, frame = run_inference(frame)
frame = draw_keypoints(output, frame)
frame = cv2.resize(frame, (int(cap.get(3)), int(cap.get(4))))
out.write(frame)
cv2.imshow('Pose estimation', frame)
else:
break
if cv2.waitKey(10) & 0xFF == ord('q'):
break
cap.release()
out.release()
cv2.destroyAllWindows()
সার্জারির VideoWriter
বেশ কিছু পরামিতি গ্রহণ করে - আউটপুট ফাইলের নাম, ফোরসিসি (চারটি কোডেক কোড, ভিডিও এনকোড করার জন্য ব্যবহৃত কোডেককে বোঝায়), ফ্রেমরেট এবং রেজোলিউশন একটি টিপল হিসেবে। ভিডিওটি অনুমান বা আকার পরিবর্তন না করার জন্য - আমরা মূল ভিডিওটির প্রস্থ এবং উচ্চতা ব্যবহার করেছি, যা এর মাধ্যমে প্রাপ্ত VideoCapture
উদাহরণ যেটিতে ভিডিও সম্পর্কে ডেটা রয়েছে, যেমন প্রস্থ, উচ্চতা, ফ্রেমের মোট সংখ্যা ইত্যাদি।
এখন, আমরা যেকোনো ইনপুট ভিডিওতে পদ্ধতিটিকে কল করতে পারি:
pose_estimation_video('../ice_skating.mp4')
এটি একটি OpenCV উইন্ডো খুলবে, রিয়েল-টাইমে অনুমান প্রদর্শন করবে। এবং এছাড়াও, এটি একটি ভিডিও ফাইল লিখবে yolov7
ডিরেক্টরি (যেহেতু আমরা করেছি cd
এটার মধ্যে আছে):
বিঃদ্রঃ: আপনার জিপিইউ যদি সমস্যায় পড়ে, অথবা আপনি যদি এমন একটি মডেলের ফলাফলগুলিকে এমন একটি অ্যাপ্লিকেশনে এমবেড করতে চান যার কার্যপ্রবাহের একটি গুরুত্বপূর্ণ দিক হিসাবে লেটেন্সি রয়েছে - ভিডিওটিকে ছোট করুন এবং ছোট ফ্রেমে কাজ করুন৷ এটি একটি সম্পূর্ণ HD 1920×1080 ভিডিও, এবং বেশিরভাগ হোম সিস্টেমে দ্রুত চালানোর জন্য সক্ষম হওয়া উচিত, কিন্তু যদি এটি আপনার সিস্টেমে কাজ না করে, তাহলে ছবি(গুলি) ছোট করুন৷
উপসংহার
এই নির্দেশিকায়, আমরা YOLO পদ্ধতি, YOLOv7 এবং YOLO এবং বস্তু সনাক্তকরণ, ভঙ্গি অনুমান এবং উদাহরণ বিভাজনের মধ্যে সম্পর্ক দেখেছি। তারপরে আমরা দেখেছি কিভাবে আপনি প্রোগ্রামেটিক API ব্যবহার করে YOLOv7 এর সাথে সহজে ইনস্টল এবং কাজ করতে পারেন, এবং ফলাফলগুলিকে সহজে অনুমান এবং প্রদর্শন করার জন্য বেশ কয়েকটি কনভিনিয়েন্স পদ্ধতি তৈরি করেছি।
অবশেষে, আমরা OpenCV ব্যবহার করে একটি ভিডিও খুলেছি, YOLOv7 এর সাথে অনুমান করেছি, এবং রিয়েল-টাইমে পোজ অনুমান করার জন্য একটি ফাংশন তৈরি করেছি, ফলে ভিডিওটিকে সম্পূর্ণ রেজোলিউশনে এবং আপনার স্থানীয় ডিস্কে 30FPS সংরক্ষণ করে।
আরও এগিয়ে যাওয়া - কম্পিউটার ভিশনের জন্য ব্যবহারিক গভীর শিক্ষা
আপনার অনুসন্ধিৎসু প্রকৃতি আপনাকে আরও যেতে চায়? আমরা আমাদের চেক আউট সুপারিশ পথ: "পাইথনের সাথে কম্পিউটার ভিশনের জন্য ব্যবহারিক গভীর শিক্ষা".
আরেকটি কম্পিউটার ভিশন কোর্স?
আমরা MNIST সংখ্যা বা MNIST ফ্যাশনের শ্রেণিবিন্যাস করব না। তারা অনেক আগে থেকেই তাদের দায়িত্ব পালন করেছে। উন্নত ব্ল্যাক-বক্স আর্কিটেকচারগুলিকে পারফরম্যান্সের ভার বহন করতে দেওয়ার আগে অনেকগুলি শেখার সংস্থান মৌলিক ডেটাসেট এবং মৌলিক আর্কিটেকচারের উপর ফোকাস করছে।
আমরা ফোকাস করতে চাই demystification, বাস্তবতা, বোধশক্তি, স্বজ্ঞা এবং বাস্তব প্রকল্প. শিখতে চাই কিভাবে আপনি একটি পার্থক্য করতে পারেন? স্তন ক্যান্সারের জন্য আমাদের মস্তিষ্ক যেভাবে ছবিগুলিকে প্রক্রিয়াকরণ করে, তার থেকে শুরু করে স্তন ক্যান্সারের জন্য একটি গবেষণা-গ্রেড ডিপ লার্নিং ক্লাসিফায়ার লেখা পর্যন্ত আমরা আপনাকে "হ্যালুসিনেট" করার নেটওয়ার্কগুলিতে নিয়ে যাব, আপনাকে ব্যবহারিক কাজের মাধ্যমে নীতি ও তত্ত্ব শেখাবো, আপনাকে সজ্জিত করব কম্পিউটারের দৃষ্টিভঙ্গি সমাধানের জন্য গভীর শিক্ষা প্রয়োগে বিশেষজ্ঞ হওয়ার উপায় এবং সরঞ্জাম।
ভিতরে কি?
- দৃষ্টির প্রথম নীতি এবং কীভাবে কম্পিউটারকে "দেখতে" শেখানো যায়
- কম্পিউটার ভিশনের বিভিন্ন কাজ এবং অ্যাপ্লিকেশন
- ট্রেডের টুল যা আপনার কাজকে সহজ করে তুলবে
- কম্পিউটার ভিশনের জন্য ডেটাসেট খোঁজা, তৈরি এবং ব্যবহার করা
- কনভোল্যুশনাল নিউরাল নেটওয়ার্কের তত্ত্ব এবং প্রয়োগ
- ডেটাসেটে ডোমেন শিফট, সহ-ঘটনা এবং অন্যান্য পক্ষপাতগুলি পরিচালনা করা
- আপনার সুবিধার জন্য শেখার স্থানান্তর এবং অন্যদের প্রশিক্ষণের সময় এবং গণনামূলক সংস্থানগুলি ব্যবহার করুন
- একটি অত্যাধুনিক স্তন ক্যান্সারের শ্রেণীবিভাগ তৈরি এবং প্রশিক্ষণ
- কীভাবে মূলধারার ধারণাগুলিতে সংশয়বাদের একটি স্বাস্থ্যকর ডোজ প্রয়োগ করা যায় এবং ব্যাপকভাবে গৃহীত কৌশলগুলির প্রভাব বোঝা যায়
- T-SNE এবং PCA ব্যবহার করে একটি ConvNet-এর "ধারণা স্থান" ভিজ্যুয়ালাইজ করা
- কোম্পানিগুলি কীভাবে ভাল ফলাফল অর্জন করতে কম্পিউটার দৃষ্টি কৌশল ব্যবহার করে তার কেস স্টাডি
- সঠিক মডেল মূল্যায়ন, সুপ্ত স্থান ভিজ্যুয়ালাইজেশন এবং মডেলের মনোযোগ সনাক্তকরণ
- ডোমেন গবেষণা সম্পাদন করা, আপনার নিজস্ব ডেটাসেট প্রক্রিয়াকরণ এবং মডেল পরীক্ষা স্থাপন করা
- অত্যাধুনিক স্থাপত্য, ধারণাগুলির অগ্রগতি, কী সেগুলিকে অনন্য করে তোলে এবং কীভাবে সেগুলি বাস্তবায়ন করা যায়
- KerasCV – একটি আধুনিক পাইপলাইন এবং মডেল তৈরি করার জন্য একটি WIP লাইব্রেরি
- কিভাবে পার্স এবং পেপার পড়ুন এবং সেগুলি নিজেই প্রয়োগ করুন
- আপনার আবেদনের উপর নির্ভর করে মডেল নির্বাচন করুন
- এন্ড-টু-এন্ড মেশিন লার্নিং পাইপলাইন তৈরি করা
- দ্রুত আর-সিএনএন, রেটিনানেট, এসএসডি এবং ইওলোর সাহায্যে অবজেক্ট সনাক্তকরণের উপর ল্যান্ডস্কেপ এবং অন্তর্দৃষ্টি
- উদাহরণ এবং শব্দার্থিক বিভাজন
- YOLOv5 এর সাথে রিয়েল-টাইম অবজেক্ট রিকগনিশন
- YOLOv5 অবজেক্ট ডিটেক্টর প্রশিক্ষণ
- KerasNLP ব্যবহার করে ট্রান্সফরমারের সাথে কাজ করা (শিল্প-শক্তি WIP লাইব্রেরি)
- চিত্রের ক্যাপশন তৈরি করতে ConvNets-এর সাথে ট্রান্সফরমার একীভূত করা
- ডিপড্রিম
- কম্পিউটার ভিশনের জন্য ডিপ লার্নিং মডেল অপ্টিমাইজেশান