আপনি শুধুমাত্র একবার তাকান
এই আবিষ্কারকটি একটু কম সুনির্দিষ্ট (v2 এ উন্নত) তবে এটি একটি দ্রুত আবিষ্কারক, এই অধ্যায়টি এটি কীভাবে কাজ করে তা ব্যাখ্যা করার চেষ্টা করবে এবং টিনসফ্লোওতে একটি রেফারেন্স কোড সরবরাহ করবে।
মূল ধারণা
এই আবিষ্কারকটির ধারণা হল যে আপনি একটি সিএনএন মডেলের চিত্রটি চালান এবং একটি পাসে সনাক্তকরণ পান। প্রথমে ইমেজটি 448x448 আকারে পরিবর্তিত হয়, তারপরে নেটওয়ার্কটিকে খাওয়ানো হয় এবং অবশেষে আউটপুটটিকে একটি নন-সর্বোচ্চ সপ্রেসন অ্যালগরিদম দ্বারা ফিল্টার করা হয়।

মডেল Yolo:
ক্ষুদ্র সংস্করণটি লিকি রিল অ্যাক্টিভেশনস সহ 9 কনভোলিউশন লেয়ারের সাথে গঠিত। দেখুন যে maxpool6 এর পরে 448x448 ইনপুট চিত্র একটি 7x7 চিত্র হয়ে যায়।

- 2 বক্স সংজ্ঞা: (গঠিত: x, y, প্রস্থ, উচ্চতা, "বস্তু" আস্থা)
- 20 শ্রেণির সম্ভাব্যতা (শুধুমাত্র "বস্তু" আস্থাটি যদি উচ্চ হয় তবে বিবেচনা করা হয়)
কোথায়:
- এস: টেন্সর স্থানিক মাত্রা (এই ক্ষেত্রে 7)
- বি: সীমানা বাক্সের সংখ্যা (x, y, w, h, আস্থা)
- সি: ক্লাস সংখ্যা
এখানে "বস্তু" বা সম্ভাব্যতা রয়েছে যে বাক্সে কোনও বস্তু রয়েছে (অথবা এটি পটভূমি), যদি প্রশিক্ষণ চলাকালীন কোনও নির্দিষ্ট কক্ষ কিছু বস্তুর উপরে না থাকে তবে আমরা "বস্তু" শূন্যে সেট করি।
এই 7x7 টেন্সর প্রতিনিধিত্ব করে
এই 7x7 টেন্সরটিকে ইনপুট চিত্রটির প্রতিনিধিত্বকারী একটি 7x7 গ্রিড হিসাবে বিবেচনা করা যেতে পারে, যেখানে এই ট্যাসারের প্রতিটি কক্ষটি 2 বাক্স সংজ্ঞা এবং ২0 শ্রেণির সম্ভাব্যতা ধারণ করবে।
এখানে বলা যায় যে প্রতিটি কোষে ২0 টি ক্লাসের মধ্যে একটি হতে পারে। (এবং প্রতিটি কোষ 2 বাঁধাই বাক্স আছে)
লক্ষ্য করুন যে এই তথ্যটি প্রতিটি আবদ্ধ বাক্সে যদি কোনও বস্তুর নীচে থাকে তবে এটি বস্তুর বর্গ সনাক্ত করতে সহায়তা করবে।
যুক্তিটি হল যে যদি সেই কোষে কোন বস্তু থাকে, তবে আমরা সেই কোষ থেকে সর্বাধিক শ্রেণির সম্ভাব্যতার মূল্য ব্যবহার করে কোন বস্তুটি সংজ্ঞায়িত করি।

ফিল্টারিং ফলাফল
ভবিষ্যদ্বাণী সময় মডেল শেষে আপনি কিছু ভালো হবে:

প্রশিক্ষণ ফেজ
পদক্ষেপ:
- গ্রাউন্ড সত্যের বাঁধাকপি বক্সের কেন্দ্রস্থলটি কোন সেলটি দেখছে। (ম্যাচ ফেজ)
- কোনও নির্দিষ্ট কক্ষ থেকে চেক করুন যে এটির আবদ্ধ বাক্সটি স্থল সত্য (আইওইউ) এর সাথে আরও বেশি পরিমাণে আবৃত থাকে, তারপরে কম সীমানা ওভারল্যাপের সীমানার বাক্সের আস্থা হ্রাস করে। (প্রতিটি সীমাবদ্ধতা বক্স এটা আস্থা উপর আছে)
- প্রতিটি কোষ থেকে কোনও বস্তু নেই এমন সমস্ত সীমাবদ্ধ বাক্সগুলির আস্থা হ্রাস করুন। এছাড়াও সেই কোষগুলির বাক্স সমন্বয় বা শ্রেণী সম্ভাব্যতাগুলি সামঞ্জস্য করবেন না।
- বদ্ধ বাক্সগুলি কোনও বস্তু ধারণ করে এমন কোষগুলির আস্থা হ্রাস করুন।
প্রি-ট্রেন
কাগজটি উল্লেখ করে যে বস্তুর সনাক্তকরণের প্রশিক্ষণ দেওয়ার আগে, তারা একটি সপ্তাহের জন্য Imagenet ডেটাসেটে শ্রেণীবিভাগের জন্য নেটওয়ার্ক (একটি গড় পুলিং, এফসি এবং সফটম্যাক্স) স্তরগুলি এবং শ্রেণির জন্য ট্রেন সংশোধন করে। (যতক্ষণ না তারা একটি ভাল শীর্ষ 5 ত্রুটি আছে)। পরে তারা সনাক্তকরণের জন্য দায়ী আরো কনভার স্তর এবং FC স্তর যুক্ত করে।
অন্যান্য বিস্তারিত
- Imagenet প্রাক প্রশিক্ষিত
- অনেক বৃদ্ধি এর ব্যবহার করুন
- প্রশিক্ষণের জন্য এসজিডি ব্যবহার করুন
- পাসকাল ভিওসি মূল্যায়ন
- 135 ইপোকস, ব্যাচ আকার: 64
- মুহূর্ত 0.9
- র্যান্ডম স্কেল এবং মূল চিত্রের 20% আকার পর্যন্ত অনুবাদ
- রঙ এক্সপোজার / সম্পৃক্তি বৃদ্ধি
ক্ষতি ফাংশন
এখানে আমরা মাল্টি-পার্ট ক্ষতির ফাংশনটি অনুকূলিত করতে চাই। এই ক্ষতি ফাংশন অ্যাকাউন্ট নিম্নলিখিত লক্ষ্য গ্রহণ করা:
- শ্রেণীবিভাগ (20 ক্লাস)
- বস্তু / কোন বস্তু শ্রেণীবিভাগ
- আবদ্ধ বাক্স সমন্বয় (X, Y, উচ্চতা, প্রস্থ) রিগ্রেশন (4 scalars)
এই উপ-উদ্দেশ্যগুলির প্রত্যেকটি একটি সমষ্টি-বর্গাকার ত্রুটি ব্যবহার করে, এটিও একটি ফ্যাক্টর এবং বাক্স সমন্বয় এবং শ্রেণীবদ্ধকরণের উদ্দেশ্যগুলিকে অসম্মতিতে ব্যবহার করা হয়।
কিছু অন্যান্য পয়েন্ট পালন করা:
- কোষের কোন বস্তু নেই তবে শ্রেণীকরণ ক্ষতিটি প্রচারিত হয় না
- স্থল সত্যের সাথে সর্বোচ্চ আইওউ (ইউনিয়ন জুড়ে সংযোগ বিচ্ছিন্ন) সঙ্গে আবদ্ধ বাক্স ক্ষতি backpropagated হয়

- B: Number of bounding boxes (2)
- Box definition
- Some particular class i
- S: Grid size (7)
- : If object appear on the cell i, if does not appear it will be zero
- : Bounding box j, from cell i responsible for prediction.
ইউনিয়ন (আইওইউ) উপর বিভক্ত
এটি একটি পদ্ধতি যা কোন বস্তুর সনাক্তকরণ আউটপুটটি কিছু স্থল সত্যের সাথে সম্পর্কিত হয় তা মূল্যায়নের জন্য ব্যবহৃত একটি পদ্ধতি, আইওইউ সাধারণত প্রশিক্ষণ এবং পরীক্ষার সময় ব্যবহৃত হয় যা পূর্বের সময় প্রদত্ত সীমানা বাক্সটি স্থল সত্য (প্রশিক্ষণ / পরীক্ষার তথ্য) ।

আইওইউ গণনা করা সহজ, আমরা মূলত সেই অঞ্চলের ইউনিয়ন দ্বারা বাক্সের মধ্যে ওভারল্যাপ এলাকাটি ভাগ করে নেব।
# Calculate Intersect over usion between boxes b1 and b2, here each box is defined with 2 points
# box(startX, startY, endX, endY), there are other definitions ie box(x,y,width,height)
def calc_iou(b1, b2):
# determine the (x, y)-coordinates of the intersection rectangle
xA = max(b1[0], b2[0])
yA = max(b1[1], b2[1])
xB = min(b1[2], b2[2])
yB = min(b1[3], b2[3])
# compute the area of intersection rectangle
area_intersect = (xB - xA + 1) * (yB - yA + 1)
# Calculate area of boxes
area_b1 = (b1[2] - b1[0] + 1) * (b1[3] - b1[1] + 1)
area_b2 = (b2[2] - b2[0] + 1) * (b2[3] - b2[1] + 1)
# compute the intersection over union by taking the intersection
# area and dividing it by the sum of prediction + ground-truth
# areas - the intersection area
iou = area_intersect / float(area_b1 + area_b2 - area_intersect)
# return the intersection over union value
return iou
নুপি সঙ্গে আইওইউ গণনা করার আরেকটি উপায়
import numpy as np
def calc_iou(xy_min1, xy_max1, xy_min2, xy_max2):
# Get areas
areas_1 = np.multiply.reduce(xy_max1 - xy_min1)
areas_2 = np.multiply.reduce(xy_max2 - xy_min2)
# determine the (x, y)-coordinates of the intersection rectangle
_xy_min = np.maximum(xy_min1, xy_min2)
_xy_max = np.minimum(xy_max1, xy_max2)
_wh = np.maximum(_xy_max - _xy_min, 0)
# compute the area of intersection rectangle
_areas = np.multiply.reduce(_wh)
# return the intersection over union value
return _areas / np.maximum(areas_1 + areas_2 - _areas, 1e-10)
অ-ম্যাক্সিমা দমন (এনএমএস)
ভবিষ্যদ্বাণী সময় সময় (প্রশিক্ষণ দেওয়ার পরে) আপনার একক বস্তুর চারপাশে অনেকগুলি বক্স পূর্বাভাস থাকতে পারে, এনএমএস অ্যালগরিদম একে অপরকে এবং কিছু থ্রেশহোল্ডের মধ্যে ওভারল্যাপ করে এমন বাক্সগুলি ফিল্টার করবে।

এখানে আমরা numpy এবং পাইথন সঙ্গে একটি উদাহরণ আছে
def non_max_suppress(conf, xy_min, xy_max, threshold=.4):
_, _, classes = conf.shape
# List Comprehension
# https://www.youtube.com/watch?v=HobjHIpLhZk
# https://www.youtube.com/watch?v=Q7EYKuZJfdA
boxes = [(_conf, _xy_min, _xy_max) for _conf, _xy_min, _xy_max in zip(conf.reshape(-1, classes), xy_min.reshape(-1, 2), xy_max.reshape(-1, 2))]
# Iterate each class
for c in range(classes):
# Sort boxes
boxes.sort(key=lambda box: box[0][c], reverse=True)
# Iterate each box
for i in range(len(boxes) - 1):
box = boxes[i]
if box[0][c] == 0:
continue
for _box in boxes[i + 1:]:
# Take iou threshold into account
if calc_iou(box[1], box[2], _box[1], _box[2]) >= threshold:
_box[0][c] = 0
return boxes
Yolo v2
Yolo আবিষ্কারক সম্প্রতি উন্নত হয়েছে, তাদের প্রধান উন্নতি তালিকা:
- দ্রুত
- আরো সঠিক (পাসকাল ডেটাসেটে 73.4 এমএপি (সমস্ত ক্লাসের গড় গড় নির্ভুলতা)
- 9000 ক্লাস পর্যন্ত সনাক্ত করতে পারে (২0 বছর আগে)
তারা উন্নতি করতে কি করেছে:
- যোগ করেনি Batchnorm
- একাধিক স্কেলে (224x224) (448x448) এ কল্পনাপ্রসূত প্রাক ট্রেন, তখন সনাক্তকরণের জন্য ট্রেনের পরে।
- এখন তারা দ্রুত-আরসিএনএন-এর মতো নোঙ্গর বাক্সগুলি ব্যবহার করে, প্রতিটি গ্রিড-সেলের পরিবর্তে শ্রেণিবিন্যাস প্রতি-বক্স আকারে করা হয়।
- বক্স আকৃতিটি ম্যানুয়ালি চয়ন করার পরিবর্তে, তারা তথ্য-ভিত্তিক একটি বক্স আকৃতি পেতে কে-মিড ব্যবহার করে
- নেটওয়ার্কটি একাধিক স্কেলে ট্রেন করুন, কারণ নেটওয়ার্কটি এখন সম্পূর্ণ রূপান্তরমূলক (কোন FC লেয়ার) কাজ করা সহজ।
- তারা চিত্র-নেট এবং এমএস-সিওওও উভয়কে প্রশিক্ষণ দেয়
- তারা সনাক্তকরণ তথ্য নেই এমন ডেটাসেটগুলিতে প্রশিক্ষণের জন্য একটি নতুন প্রক্রিয়া তৈরি করে। বহু অংশ ক্ষতি ফাংশন নির্বাচন করে কি প্রচার করা।
- ImageNet এবং COCO এ একযোগে প্রশিক্ষণের জন্য বিভিন্ন উত্স এবং আমাদের যৌথ অপ্টিমাইজেশান কৌশল থেকে তথ্য একত্রিত করতে WordTree ব্যবহার করুন।
তথ্যসূত্র:
- https://www.youtube.com/watch?v=NM6lrxy0bxs&t=617s
- http://www.pyimagesearch.com/2015/02/16/faster-non-maximum-suppression-python/
- https://github.com/leonardoaraujosantos/DeepLearningFramework/files/704078/1506.02640v5.pdf
- https://github.com/leonardoaraujosantos/DeepLearningFramework/files/703055/1612.08242v1.pdf
- https://github.com/pjreddie/darknet/blob/master/cfg/tiny-yolo.cfg
- https://docs.google.com/presentation/d/1aeRvtKG21KHdD5lg6Hgyhx5rPq_ZOsGjG5rJ1HP7BbA/pub?start=false&loop=false&delayms=3000&slide=id.g137784ab86_4_1598
- https://en.wikipedia.org/wiki/Jaccard_index
- http://www.pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/
- http://www.pyimagesearch.com/2014/11/17/non-maximum-suppression-object-detection-python/
- http://vision.stanford.edu/teaching/cs231b_spring1415/syllabus.html
- https://github.com/ruiminshen/yolo-tf
- https://github.com/dshahrokhian/YOLO_tensorflow
- https://github.com/hizhangp/yolo_tensorflow
- https://github.com/nilboy/tensorflow-yolo
- https://www.tensorflow.org/versions/r0.12/api_docs/python/image/working_with_bounding_boxes
- https://www.tensorflow.org/api_docs/python/tf/image/non_max_suppression
- http://www.pyimagesearch.com/2014/11/10/histogram-oriented-gradients-object-detection/
- http://stackoverflow.com/questions/42879109/tensorflow-non-maximum-suppression
- http://silverpond.com.au/2016/10/24/pedestrian-detection-using-tensorflow-and-inception.html
- https://github.com/jrosebr1/imutils/blob/master/imutils/object_detection.py
- https://pjreddie.com/darknet/yolov1/
- https://github.com/DrewNF/Tensorflow_Object_Tracking_Video
- https://github.com/moontree/yolo_tensorflow
- https://github.com/subodh-malgonde/yolo
- https://github.com/gliese581gg/YOLO_tensorflow
- https://github.com/aleju/papers/blob/master/neural-nets/YOLO9000.md
- https://github.com/allanzelener/YAD2K/blob/master/yad2k/models/keras_yolo.py
- https://github.com/allanzelener/YAD2K
- https://github.com/longcw/yolo2-pytorch
- https://arxiv.org/pdf/1612.08242.pdf
- http://aimotion.blogspot.co.uk/2010/06/hi-all-it-has-been-while-since-my-last.html
- https://github.com/tommy-qichang/yolo.torch/tree/master/yoloCriterion
- https://github.com/marvis/pytorch-yolo2