Իրական ժամանակում օբյեկտների հայտնաբերման համակարգի կառուցում YOLO ալգորիթմով


Վերջին տարիներին համակարգչային տեսողության ոլորտը ականատես է եղել ուշագրավ առաջընթացների, որտեղ իրական ժամանակում օբյեկտների հայտնաբերումը ամենահետաքրքիր և ազդեցիկ ոլորտներից մեկն է: Իրական ժամանակում օբյեկտների հայտնաբերումը վերաբերում է պատկերների կամ տեսանյութերի օբյեկտները իրական ժամանակում հայտնաբերելու և նույնականացնելու ունակությանը, ինչը հնարավորություն է տալիս կիրառությունների լայն շրջանակ, ինչպիսիք են ինքնավար մեքենաները, հսկման համակարգերը, ընդլայնված իրականությունը և այլն: Այս ձեռնարկում մենք կուսումնասիրենք, թե ինչպես կառուցել իրական ժամանակի օբյեկտների հայտնաբերման համակարգ՝ օգտագործելով Python-ը և YOLO (You Only Look One) ալգորիթմը:

YOLO ալգորիթմը հեղափոխեց օբյեկտների հայտնաբերումը` ներմուծելով մեկ միասնական մոտեցում, որն իրականացնում է և՛ օբյեկտների տեղայնացումը, և՛ դասակարգումը մեկ անցումով: Ի տարբերություն ավանդական մեթոդների, որոնք օգտագործում են բարդ խողովակաշարեր, որոնք ներառում են բազմաթիվ փուլեր, YOLO ալգորիթմը հասնում է տպավորիչ արագության և ճշգրտության՝ դիտարկելով օբյեկտների հայտնաբերումը որպես ռեգրեսիայի խնդիր: Այն մուտքագրված պատկերը բաժանում է ցանցի և կանխատեսում է սահմանափակող տուփեր և դասերի հավանականություններ անմիջապես ցանցի բջիջներից:

Python-ն իր պարզությամբ, բազմակողմանիությամբ և գրադարանների հարուստ էկոհամակարգով հիանալի ընտրություն է իրական ժամանակում օբյեկտների հայտնաբերման համակարգերի ներդրման համար: Մենք կօգտագործենք Darknet շրջանակը, որը բաց կոդով նեյրոնային ցանցի շրջանակ է, որը գրված է C և CUDA-ով, որպեսզի վարժեցնենք մեր մոդելը՝ օգտագործելով YOLO ալգորիթմը: Darknet Framework-ի և Python-ի օգնությամբ մենք կկառուցենք իրական ժամանակի օբյեկտների հայտնաբերման համակարգ, որը կարող է հայտնաբերել և դասակարգել օբյեկտները կենդանի վիդեո հոսքերից կամ ձայնագրված տեսանյութերից:

Սկսել

Python-ի և YOLO ալգորիթմի միջոցով իրական ժամանակում օբյեկտների հայտնաբերման մեր համակարգը կառուցելու համար մենք պետք է ստեղծենք մեր զարգացման միջավայրը և տեղադրենք անհրաժեշտ գրադարանները: Հետևյալ քայլերը ձեզ կառաջնորդեն տեղադրման գործընթացում

Քայլ 1. Տեղադրեք OpenCV

OpenCV-ն համակարգչային տեսողության հանրաճանաչ գրադարան է, որն ապահովում է պատկերների և տեսանյութերի մշակման հիմնական գործիքներն ու գործառույթները: Մենք կարող ենք տեղադրել OpenCV-ն՝ օգտագործելով pip-ը՝ Python փաթեթների կառավարիչը, տերմինալում գործարկելով հետևյալ հրամանը −

pip install opencv-python

Քայլ 2. Տեղադրեք Darknet-ը

Darknet-ն այն շրջանակն է, որը մենք կօգտագործենք մեր YOLO մոդելը մարզելու համար: Darknet-ը տեղադրելու համար բացեք տերմինալի պատուհանը և հետևեք այս քայլերին

Կլոնավորեք Darknet պահեստը GitHub-ից

git clone https://github.com/AlexeyAB/darknet.git

Փոխեք Darknet տեղեկատուի մեջ

cd darknet

Կառուցեք Darknet-ը

պատրաստել

Այս քայլը կարող է որոշ ժամանակ տևել, քանի որ այն կազմում է C կոդը և կառուցում Darknet շրջանակը: Կառուցման գործընթացն ավարտվելուց հետո դուք պետք է պատրաստ ունենաք Darknet գործարկիչը օգտագործման համար:

YOLO-ի հետ իրական ժամանակում օբյեկտների հայտնաբերման համակարգի կառուցում

Այժմ, երբ մենք ստեղծեցինք մեր զարգացման միջավայրը և տեղադրեցինք անհրաժեշտ գրադարանները, մենք կարող ենք շարունակել իրական ժամանակում օբյեկտների հայտնաբերման մեր համակարգի կառուցումը: Ես բաժանել եմ օբյեկտների հայտնաբերման հետ կապված բոլոր տարբեր քայլերը, որին հաջորդում է ամբողջական կոդը՝ ամբողջ խողովակաշարն ու գործընթացը ավելի լավ հասկանալու համար: Սա կկանխի կոդերի փոքր կտորների հետ կապված շփոթությունը:

Համակարգի կառուցման հիմնական քայլերը հետևյալն են

  • Տվյալների հավաքածուի պատրաստում – Մեր YOLO մոդելը վարժեցնելու համար մեզ անհրաժեշտ է պիտակավորված տվյալների հավաքածու, որը պարունակում է պատկերներ և համապատասխան ծանոթագրություններ: Տվյալների հավաքածուն պետք է բաղկացած լինի պատկերներից՝ պիտակավորված սահմանափակող տուփերով այն օբյեկտների շուրջ, որոնք մենք ցանկանում ենք հայտնաբերել: Անոտացիաները սովորաբար ներառում են դասի պիտակը և սահմանող տուփի կոորդինատները:

  • YOLO մոդելի կազմաձևում - YOLO ալգորիթմն ունի տարբեր տատանումներ, ինչպիսիք են YOLOv1, YOLOv2, YOLOv3 և YOLOv4: Յուրաքանչյուր տարբերակ ունի իր կոնֆիգուրացիայի ֆայլը, որը նշում է ցանցի ճարտարապետությունը, հիպերպարամետրերը և վերապատրաստման կարգավորումները: Մենք պետք է ընտրենք YOLO-ի համապատասխան տարբերակը և կարգավորենք այն՝ ելնելով մեր պահանջներից:

  • YOLO մոդելի ուսուցում – Տվյալների հավաքածուի և կազմաձևման առկայության դեպքում մենք կարող ենք սկսել մեր YOLO մոդելի ուսուցումը` օգտագործելով Darknet շրջանակը: Դասընթացը ներառում է պիտակավորված պատկերները մոդելին մատակարարելը, ցանցի կշիռների օպտիմիզացումը՝ օգտագործելով ետ տարածումը և պարամետրերի կարգավորումը՝ հայտնաբերման սխալները նվազագույնի հասցնելու համար:

  • Փորձարկում և գնահատում – Երբ մոդելը վերապատրաստվի, մենք կարող ենք գնահատել դրա կատարումը՝ փորձարկելով այն առանձին պատկերների կամ տեսանյութերի վրա: Մենք չափում ենք այնպիսի չափումներ, ինչպիսիք են ճշգրտությունը, հետ կանչումը և միջին միջին ճշգրտությունը (mAP)՝ գնահատելու մեր օբյեկտների հայտնաբերման համակարգի ճշգրտությունն ու հուսալիությունը:

  • Իրական ժամանակում օբյեկտների հայտնաբերում – Մոդելը հաջողությամբ ուսուցանելուց և գնահատելուց հետո մենք կարող ենք այն ինտեգրել ուղիղ վիդեո հոսքի կամ ձայնագրված տեսանյութերի հետ՝ իրական ժամանակում օբյեկտների հայտնաբերում իրականացնելու համար: Մենք կօգտագործենք OpenCV-ն՝ վիդեո շրջանակներ նկարահանելու, օբյեկտների հայտնաբերման YOLO ալգորիթմը կիրառելու և արդյունքներն իրական ժամանակում ցուցադրելու համար:

Այժմ եկեք խորանանք կոդի իրականացման յուրաքանչյուր քայլի մեջ՝ իրական ժամանակում օբյեկտների հայտնաբերման մեր համակարգը կառուցելիս:

Ամբողջական կոդը

Օրինակ

Ահա ամբողջական կոդը −

import cv2

# Load YOLO weights and configuration
net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg")
classes = []
with open("coco.names", "r") as f:
   classes = [line.strip() for line in f.readlines()]

# Set up output layers
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]

# Load video stream
cap = cv2.VideoCapture(0)

while True:
   # Read frames from the video stream
   ret, frame = cap.read()
   if not ret:
      break

   # Preprocess frame for object detection
   blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
   net.setInput(blob)
   outs = net.forward(output_layers)

   # Process the outputs
   class_ids = []
   confidences = []
   boxes = []
   for out in outs:
      for detection in out:
         scores = detection[5:]
         class_id = np.argmax(scores)
         confidence = scores[class_id]
         if confidence > 0.5:
            # Object detected
            center_x = int(detection[0] * frame.shape[1])
            center_y = int(detection[1] * frame.shape[0])
            width = int(detection[2] * frame.shape[1])
            height = int(detection[3] * frame.shape[0])
            x = int(center_x - width / 2)
            y = int(center_y - height / 2)

            boxes.append([x, y, width, height])
            confidences.append(float(confidence))
            class_ids.append(class_id)

   # Apply non-maximum suppression to remove overlapping detections
   indices = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)
   # Draw bounding boxes and labels on the frame
   font = cv2.FONT_HERSHEY_PLAIN
   colors = np.random.uniform(0, 255, size=(len(classes), 3))
   if len(indices) > 0:
      for i in indices.flatten():
         x, y, w, h = boxes[i]
         label = str(classes[class_ids[i]])
         confidence = confidences[i]
         color = colors[i]
         cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2)
         cv2.putText(frame, f"{label} {confidence:.2f}", (x, y - 5), font, 1, color, 2)

   # Display the resulting frame
   cv2.imshow("Real-time Object Detection", frame)
   if cv2.waitKey(1) == ord("q"):
      break

# Release resources
cap.release()
cv2.destroyAllWindows()

Եզրակացություն

Այս ձեռնարկում մենք ուսումնասիրել ենք, թե ինչպես կառուցել իրական ժամանակի օբյեկտների հայտնաբերման համակարգ՝ օգտագործելով Python-ը և YOLO ալգորիթմը: Մենք սկսեցինք ներկայացնելով իրական ժամանակում օբյեկտների հայտնաբերման հայեցակարգը և YOLO ալգորիթմի նշանակությունը համակարգչային տեսողության ոլորտում: Այնուհետև մենք լուսաբանեցինք անհրաժեշտ գրադարանների տեղադրումը, ներառյալ Python-ը, OpenCV-ն և Darknet Framework-ը:

Հիմնական բովանդակության ընթացքում մենք քննարկեցինք իրական ժամանակում օբյեկտների հայտնաբերման համակարգի կառուցմանն առնչվող էական քայլերը, ինչպիսիք են տվյալների բազայի պատրաստումը, YOLO մոդելի կազմաձևումը, մոդելի ուսուցումը և դրա կատարողականի փորձարկումն ու գնահատումը: Մենք նաև տրամադրեցինք կոդի ամբողջական օրինակ, որը ցույց էր տալիս իրական ժամանակում օբյեկտների հայտնաբերման գործընթացը՝ օգտագործելով Python, OpenCV և YOLO ալգորիթմը:

Հետևելով այս ձեռնարկում նկարագրված քայլերին, դուք կարող եք ստեղծել իրական ժամանակում օբյեկտների հայտնաբերման ձեր սեփական համակարգը, որը կարող է հայտնաբերել և դասակարգել օբյեկտները կենդանի վիդեո հոսքերում կամ ձայնագրված տեսանյութերում: Սա հնարավորություններ է բացում կիրառությունների լայն շրջանակի համար, ներառյալ հսկողության համակարգերը, ինքնավար մեքենաները և հավելյալ իրականության փորձը:

Օբյեկտների հայտնաբերումը հետաքրքիր և արագ զարգացող ոլորտ է, և YOLO ալգորիթմը հասանելի բազմաթիվ տեխնիկաներից միայն մեկն է: Համակարգչային տեսողության աշխարհը հետագայում ուսումնասիրելիս մտածեք այլ ալգորիթմների, տվյալների հավաքածուների և ուսուցման ռազմավարությունների հետ փորձերի մասին՝ բարձրացնելու ձեր օբյեկտների հայտնաբերման համակարգերի ճշգրտությունն ու կատարումը: