Bing-su / adetailer

Auto detecting, masking and inpainting with detection model.
GNU Affero General Public License v3.0
4.18k stars 325 forks source link

[Bug]: It detects a large number of nonexistent faces. #718

Closed No-Kan closed 1 month ago

No-Kan commented 1 month ago

Describe the bug

Suddenly we had a large number of false positives, as shown in the following image. I thought it was a bug, so I uninstalled it, but it didn't change. I have no idea what the cause is and I need help! 突然、以下の画像のような大量の誤検知が発生するようになりました。 バグかと思ってアンインストールしましたが、変わりませんでした。 原因がさっぱりなので、助けてほしいです!

Steps to reproduce

No response

Screenshots

ダウンロード (1) ダウンロード

Console logs, from start to end.

0: 640x448 300 faces, 838.8ms

List of installed extensions

No response

dosubot[bot] commented 1 month ago

@No-Kan こんにちは! 私はDosuと申します。バグを解決したり、質問に答えたり、貢献者になる手助けをするボットです。人間のメンテナーを待っている間、お手伝いできますよ! Let's squash that bug together! 🐞

To address the issue of your face detection algorithm generating a large number of false positives, you can try increasing the min_detection_confidence parameter in the mediapipe_face_detection function. This parameter controls the confidence threshold for detecting faces, and increasing it can help reduce false positives.

Here is the relevant part of the code where you can adjust the confidence parameter:

def mediapipe_face_detection(
    model_type: int, image: Image.Image, confidence: float = 0.3
) -> PredictOutput[float]:
    import mediapipe as mp

    img_width, img_height = image.size

    mp_face_detection = mp.solutions.face_detection
    draw_util = mp.solutions.drawing_utils

    img_array = np.array(image)

    with mp_face_detection.FaceDetection(
        model_selection=model_type, min_detection_confidence=confidence
    ) as face_detector:
        pred = face_detector.process(img_array)

    if pred.detections is None:
        return PredictOutput()

    preview_array = img_array.copy()

    bboxes = []
    for detection in pred.detections:
        draw_util.draw_detection(preview_array, detection)

        bbox = detection.location_data.relative_bounding_box
        x1 = bbox.xmin * img_width
        y1 = bbox.ymin * img_height
        w = bbox.width * img_width
        h = bbox.height * img_height
        x2 = x1 + w
        y2 = y1 + h

        bboxes.append([x1, y1, x2, y2])

    masks = create_mask_from_bbox(bboxes, image.size)
    preview = Image.fromarray(preview_array)

    return PredictOutput(bboxes=bboxes, masks=masks, preview=preview)

To reduce false positives, you can increase the confidence parameter when calling the mediapipe_face_detection function. For example, you can change the confidence from 0.3 to 0.5 or higher:

result = mediapipe_face_detection(model_type=0, image=your_image, confidence=0.5)

Adjust the confidence level as needed to find the optimal balance between detecting faces and reducing false positives [1].

To continue talking to Dosu, mention @dosu.

No-Kan commented 1 month ago

Sorry... I've solved myself. The cause was that I was using “--medvram-sdxl”, and it worked fine when I started without it. However, it is not a fundamental solution, so I would like it to be OK even if “--medvram-sdxl” is used. すいません、自己解決できました。 原因は”--medvram-sdxl”を使用していたことで、使用せずに起動すると正常に動作しました。 しかし根本的な解決にはなってないため、"--medvram-sdxl"を使用しても問題ないようにしてほしいです。

Bing-su commented 1 month ago

Windowsで、pytorch 2.4.0バージョンを使っていて、cpuで推論するときにこの問題が発生します。 pytorchのバージョンを変更してください。 https://github.com/Bing-su/adetailer/issues/693

No-Kan commented 1 month ago

I reverted Pytorch back to 2.1.2 and the bug didn't occur when using medvram-sdxl. If the bug is caused by Pytorch 2.4.0, I hope it will be fixed. Thanks to you for letting me know! Pytorchを2.1.2に戻したらmedvram-sdxlを使用してもバグが発生しませんでした。 Pytorch2.4.0に起因するバグなら、修正されることを願います。 教えてくれたあなたに感謝を!