Tôi cũng đang khám phá API phát hiện đối tượng của Tensorflow. Cụ thể là tôi đang cố gắng tinh chỉnh mô hình hiện tại để loại bỏ các mặt tích cực sai cho việc phát hiện mọi người.
Các giấy tờ sau đây mô tả khai thác tiêu cực khó khăn cho các mục đích tương tự như bạn mô tả: Training Region-based Object Detectors with Online Hard Example Mining
Trong phần 3.1 họ mô tả cách sử dụng một foreground và background lớp:
Rois Background. Một khu vực được gắn nhãn nền (bg) nếu tối đa IoU của nó với sự thật mặt đất là trong khoảng [bg lo, 0,5). Một ngưỡng thấp hơn của bg lo = 0,1 được sử dụng bởi cả FRCN và SPPnet, và là giả thuyết trong [14] để khai thác thô sơ gần đúng tiêu cực; giả định là các khu vực có sự chồng chéo với sự thật về mặt đất là nhiều khả năng là những điều khó hiểu hoặc khó hiểu hơn. Chúng tôi hiển thị trong Phần 5.4 rằng mặc dù heuristic này giúp hội tụ và độ chính xác phát hiện, nhưng nó là tối ưu bởi vì nó bỏ qua một số khu vực nền khó khăn, không quan trọng, nhưng quan trọng là . Phương pháp của chúng tôi loại bỏ ngưỡng bg lo.
Trong thực tế nghiên cứu này được tham chiếu và ý tưởng của nó được sử dụng trong mã losses.py phát hiện đối tượng Tensorflow cho khai thác mỏ cứng:
class HardExampleMiner(object):
"""Hard example mining for regions in a list of images.
Implements hard example mining to select a subset of regions to be
back-propagated. For each image, selects the regions with highest losses,
subject to the condition that a newly selected region cannot have
an IOU > iou_threshold with any of the previously selected regions.
This can be achieved by re-using a greedy non-maximum suppression algorithm.
A constraint on the number of negatives mined per positive region can also be
enforced.
Reference papers: "Training Region-based Object Detectors with Online
Hard Example Mining" (CVPR 2016) by Srivastava et al., and
"SSD: Single Shot MultiBox Detector" (ECCV 2016) by Liu et al.
"""
Dựa trên mô hình tập tin cấu hình của bạn, HardMinerObject được trả về bởi losses_builder.py in this bit of code:
def build_hard_example_miner(config,
classification_weight,
localization_weight):
"""Builds hard example miner based on the config.
Args:
config: A losses_pb2.HardExampleMiner object.
classification_weight: Classification loss weight.
localization_weight: Localization loss weight.
Returns:
Hard example miner.
"""
loss_type = None
if config.loss_type == losses_pb2.HardExampleMiner.BOTH:
loss_type = 'both'
if config.loss_type == losses_pb2.HardExampleMiner.CLASSIFICATION:
loss_type = 'cls'
if config.loss_type == losses_pb2.HardExampleMiner.LOCALIZATION:
loss_type = 'loc'
max_negatives_per_positive = None
num_hard_examples = None
if config.max_negatives_per_positive > 0:
max_negatives_per_positive = config.max_negatives_per_positive
if config.num_hard_examples > 0:
num_hard_examples = config.num_hard_examples
hard_example_miner = losses.HardExampleMiner(
num_hard_examples=num_hard_examples,
iou_threshold=config.iou_threshold,
loss_type=loss_type,
cls_loss_weight=classification_weight,
loc_loss_weight=localization_weight,
max_negatives_per_positive=max_negatives_per_positive,
min_negatives_per_image=config.min_negatives_per_image)
return hard_example_miner
được trả về bởi model_builder.py và được gọi bởi train.py. Vì vậy, về cơ bản, có vẻ như với tôi rằng chỉ đơn giản là tạo ra các nhãn tích cực thực sự của bạn (với một công cụ như LabelImg hoặc RectLabel) là đủ cho thuật toán đào tạo để tìm âm bản cứng trong cùng một hình ảnh. Câu hỏi liên quan cho một số xuất sắc walkthrough. Tôi đã không nhìn thấy bất cứ ai khác đề cập đến việc phải tạo ra âm bản thân mình. Trong trường hợp bạn muốn nạp dữ liệu không có tích cực thực sự (nghĩa là không có gì được phân loại trong hình ảnh), tôi không thực sự biết và tôi hy vọng một người nào khác có thể kêu gọi liệu nó có cần thiết hay không. PASCAL VOC đề cập đến một nhãn "khác", ID 0, có thể phục vụ cho các nhãn distractors, nhưng tôi đã không cố gắng cho ăn 0 hoặc không là nhãn.
Vui lòng cập nhật mọi kết quả bạn tìm thấy hoặc bất kỳ thông tin mới nào bạn gặp phải. Cảm ơn!