5

Tôi đang thiết lập Google Object Detection API mới để tìm các đối tượng nhỏ trong các khu vực hình ảnh vệ tinh lớn. Nó hoạt động khá tốt - nó tìm thấy tất cả 10 đối tượng tôi muốn, nhưng tôi cũng nhận được 50-100 dương tính giả [những thứ trông hơi giống đối tượng mục tiêu, nhưng không phải là].Chiến lược tốt nhất để giảm dương tính giả: API phát hiện đối tượng mới của Google trên hình ảnh vệ tinh

Tôi đang sử dụng sample config từ 'pets' tutorial, để tinh chỉnh mô hình faster_rcnn_resnet101_coco mà họ cung cấp. Tôi đã bắt đầu nhỏ, chỉ với 100 ví dụ đào tạo về các đối tượng của tôi (chỉ 1 lớp). 50 ví dụ trong bộ xác nhận của tôi. Mỗi ví dụ là một hình ảnh 200x200 pixel với một đối tượng được gắn nhãn (~ 40x40) ở giữa. Tôi đào tạo cho đến khi độ chính xác của tôi bị mất.

Tôi khá mới sử dụng học sâu để phát hiện đối tượng. Chiến lược tốt nhất để tăng độ chính xác của tôi là gì? ví dụ. Khai thác khó tiêu cực? Tăng kích thước tập dữ liệu đào tạo của tôi? Tôi chưa thử mô hình chính xác nhất mà họ cung cấp faster_rcnn_inception_resnet_v2_atrous_coco vì tôi muốn duy trì một số tốc độ, nhưng sẽ làm như vậy nếu cần.

Khai phá âm khó có vẻ là một bước hợp lý. Nếu bạn đồng ý, làm thế nào để thực hiện nó w.r.t thiết lập tệp tfrecord cho tập dữ liệu đào tạo của tôi? Giả sử tôi tạo 200x200 hình ảnh cho mỗi trong số 50-100 kết quả dương tính giả:

  • Tôi có tạo tệp 'chú thích' xml cho mỗi thành phần không có phần tử 'đối tượng' không?
  • ... hoặc tôi có gắn nhãn những từ khóa phủ định cứng này làm lớp thứ hai không?
  • Nếu sau đó tôi có 100 từ âm đến 100 điểm tích cực trong tập huấn luyện của tôi - đó có phải là tỷ lệ lành mạnh không? Tôi có thể bao gồm bao nhiêu âm bản?

Trả lời

0

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!

Các vấn đề liên quan