Tag: エラー

  • [Updated December 2022] How to Install YOLOX

    [Updated December 2022] How to Install YOLOX

    What is YOLOX?

    Among the many entries in the YOLO series, the latest one, YOLOX, was released in July 2021.

    The YOLOX paper is available here (currently a preprint).
    The GitHub repository is here.

    YOLO is an object detection algorithm.
    It is designed to run in real time and is extremely lightweight (inference alone can even run on a smartphone). It is also highly adaptable, and is widely used in IoT devices.

    “Object detection algorithm” may sound complicated, but an easy analogy is a camera’s automatic face or eye focus.
    A marker appears indicating “this is a face”; the same idea applies to other objects, and the algorithm can also classify what each one is.

    There are many versions in the YOLO series: YOLO, YOLOv2, YOLOv3, YOLOv4, YOLOv5, and YOLOX.
    It also runs not only on Python but on MATLAB as well, so you can adapt it to whichever platform you use.

    Unlike the architecture used from YOLOv3 onward, YOLOX returns to the design of the original YOLO. It is reportedly faster and considerably more accurate.

    Other blogs cover the details as well.

    How to install YOLOX

    Installation instructions are given on the GitHub page, but they are in English and do not cover using a virtual environment, so here I explain how to do it with an Anaconda virtual environment.

    On both Windows and Mac, following the YOLOX manual exactly produced one error after another.
    Errors will likely keep changing with future versions, so look them up as they come.

    See below for how to use the conda command in the macOS Terminal.

    On Windows, I recommend using Anaconda Prompt.

    Open the Terminal (Anaconda Prompt), and you will get a black window filled with text.
    You should see (base) at the left of the last line.
    This means you are not currently inside a virtual environment.

    YOLOX will run without a virtual environment, but since environments can conflict with other packages, I recommend creating one.

    First, enter the following code to create a virtual environment.

    conda create -n YoloX python=3.8

    YoloX is the name of the virtual environment; you can use any name you like.
    You can also specify the Python version with python=3.8.

    Then activate the virtual environment with the following code.

    conda activate YoloX

    If (base) on the left has changed to (YoloX), you are all set.

    Installing CUDA

    First, if this is your first time installing machine learning libraries and you plan to train YOLO on a GPU, install CUDA.
    (Training on a CPU takes an absurdly long time, so I do not recommend it. Note that GPUs cannot currently be used on Apple Silicon machines.)
    CUDA can be downloaded from the official site.

    As for the CUDA version, I suggest checking which CUDA versions PyTorch supports and installing one of those.
    PyTorch official site

    To install an older version, click Download now and then, further down the page under Resources, use Archive of Previous CUDA Releases.

    The latest version may work too, but for now, matching the version to PyTorch should let you run everything without trouble.

    To check whether it is installed on Windows, open “Edit the system environment variables,” go to Advanced > Environment Variables, and see whether there is a path beginning with CUDA_PATH.
    The number after the V indicates the version.

    Installing PyTorch

    Before installing, update pip.
    Activate the virtual environment in Anaconda Prompt and run the following command.

    python -m pip install --upgrade pip

    Go to the PyTorch official site and choose the installation method that matches your environment.
    One catch here is the Package field: be sure to select pip.
    Installing with conda will cause errors later on.

    Copy and paste the command under “Run this Command” to install it in your virtual environment.

    Once the installation finishes, use the following command to check that PyTorch is installed.

    pip list

    As long as torch appears in the list, you’re good to go!!!
    As a quick check, start python and run the following command.

    import torch
    print(torch.cuda.is_available())

    If the output is True, the installation succeeded and torch is ready to run on the GPU.
    (On a Mac or on a computer without a GPU it will return False, but as long as the import works you’re fine.)
    If you get an error, go back and check the installation again.

    Installing the packages required for YOLOX

    Download (clone) the YOLOX files from GitHub.
    If you can use Git commands, you can clone the repository with the code below.

    git clone git@github.com:Megvii-BaseDetection/YOLOX.git

    Next, move into the cloned folder and install the required packages.

    First, edit the contents of requirements.txt in the cloned YOLOX folder as follows.

    # TODO: Update with exact module version
    numpy
    #torch>=1.7
    opencv_python
    loguru
    tqdm
    #torchvision
    thop
    ninja
    tabulate
    
    # verified versions
    # pycocotools corresponds to https://github.com/ppwwyyxx/cocoapi
    #pycocotools>=2.0.2
    #onnx==1.8.1
    onnxruntime==1.8.0
    onnx-simplifier==0.3.5

    It seems that packages such as pycocotools cannot be installed with this command.

    Once that’s done, save requirements.txt and run the command below in the terminal (Anaconda prompt).

    cd YOLOX
    pip3 install -r requirements.txt
    pip3 install cython pycocotools

    The downloaded YOLOX folder contains a file called “requirements.txt” that lists the required packages. The second command opens this file in read-only mode and installs the packages listed in it.

    pip3 install cython pycocotools

    This command installs cython and pycocotools.
    It seems these have to be installed separately.

    When you run this command, some of you may see the following error.

          building 'pycocotools._mask' extension
          error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/

    Microsoft C++ Build Tools is apparently required by pycocotools. (Oddly enough, the error also appears on Mac, even though there is no Mac version.)
    Windows users should install it just to be safe.

    After installing it, try the installation again with the code below.

    pip3 install "git+https://github.com/philferriere/cocoapi.git#egg=pycocotools&subdirectory=PythonAPI"

    If that still doesn’t work, install it with the following command.

    conda install -c conda-forge pycocotools

    In general we’ve been installing these packages with pip, but since this one simply won’t install that way, we resort to installing it with conda.

    Next, download yolox_x.pth.
    The download starts as soon as you click the link.

    Move the downloaded file into the YOLOX folder you cloned from GitHub.
    This gives you the model used for detection in the demo, placed wherever you like.

    Add the following lines to the top of tools/demo.py so that the yolox folder can be accessed.

    #demo.pyの中身に書き込みましょう。
    import sys
    import os
    sys.path.append(os.path.join(os.path.dirname(__file__), '..'))

    Without this, you’ll get an error saying the yolox package cannot be found.

    Then run the following command in the terminal.
    This lets you check whether the demo runs correctly.

    python tools/demo.py image -n yolox-x -c yolox_x.pth --path assets/dog.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device gpu 
    #gpuで動かさない場合には、gpuをcpuに書き換えてください。

    Replace –device gpu with –device cpu as appropriate for your setup.

    If the following image appears in YOLOX/YOLOX_outputs/yolox_x/vis_res/20…….., everything is working.

    Bonus

    For those who aren’t sure which computer to buy, I’ve started offering PC purchase consultations on Coconala!

    あなたの要望に合わせてパソコンを選び、提案します パソコン選びに困っている方々へ!様々な目的に対応できます!

    I often pick out computers and give advice, and many friends told me I could make money doing PC consultations.
    Inspired by that, I decided to give it a try!

    I’ll recommend a machine that fits how you plan to use it and your budget.
    In particular, I’ve chosen and used many computers for machine learning.

    And if you’d like, I can also advise you on what to look for the next time you buy a computer.

    Computers I’ve picked out so far include analysis machines for the lab, everyday-use machines, game-streaming machines, machines for incoming university students, machines that can run CAD for architecture students, and simple all-purpose machines.

    I use both Mac and Windows, so I can talk about and recommend either!

    Please feel free to make use of it.

  • My elif conditional branching isn’t working!! [Python]

    My elif conditional branching isn’t working!! [Python]

    Have you ever wanted to branch on multiple conditions with an if statement, tried using elif, and found that although no error appears, the results somehow aren’t what you expected?
    If so, the situation described below might be the cause.
    For reference, since I made this mistake myself, I’m writing it down as a note.

    The problematic program

    The problem arises when you write two conditions in the if and elif statements and build a program that includes elif.

    def trable(a, b):
        if a >= 10 & b >= 10:
            print("patern A")
        elif a >= 10 & b < 10:
            print("patern B")
        elif a < 10 & b >= 10:
            print("patern C")
        else:
            print("patern D")
    
    trable(11, 11)
    trable(11, 9)
    trable(9, 11)
    trable(9, 9)

    When you run the program above, you might expect the cases to be sorted into patterns A, B, C, and D in order from the top, but the actual output is as follows.

    patern A
    patern B
    patern C
    patern B

    What if we swap the order?

    def trable(a, b):
        if a >= 10 & b >= 10:
            print("patern A")
        elif a < 10 & b < 10:
            print("patern B")
        elif a >= 10 & b >= 10:
            print("patern C")
        else:
            print("patern D")
    
    trable(11, 11)
    trable(9, 11)
    trable(11, 9)
    trable(9, 9)

    If you swap the code for patterns B and C and write a program that you expect to output A, B, C, and D, the actual output is as follows.

    patern A
    patern D
    patern D
    patern D

    elif itself is used as shown below when you want to define multiple conditions.

    if 条件式A:
      条件式Aが真(True)となった場合の処理
    elif 条件式B:
      条件式Aが偽(False)で、条件式Bが真(True)となった場合の処理
    else:
      条件式Aが偽(False)で、条件式Bも偽(False)となった場合の処理

    However, once the conditional expressions in the if and elif statements involve two conditions, the problem described above is likely to occur.
    As a result, you don’t get the output you intended.

    The tricky part is that no error is raised, so you can’t tell whether it worked until you actually look at the results.

    How to fix it

    When you want to branch into multiple cases using multiple conditions, avoid specifying multiple conditions in an elif statement.

    def resolve(a, b):
        if a>= 10:
            if b >= 10:
                print("patern A")
            else:
                print("patern B")
    
        else:
            if b >= 10:
                print("patern C")
            else:
                print("patern D")
    
    resolve(11, 11)
    resolve(11, 9)
    resolve(9, 11)
    resolve(9, 9)

    It becomes more cumbersome, but doing it this way produces exactly the output you expect.

    Programming has unexpected pitfalls like this, so it’s a good lesson in carefully checking the code you write.

    Addendum (August 2022)

    It turns out the problem was not wrapping the conditions in parentheses.

    def trable(a, b):
        if (a >= 10) & (b >= 10):
            print("patern A")
        elif (a < 10) & (b < 10):
            print("patern B")
        elif (a >= 10) & (b >= 10):
            print("patern C")
        else:
            print("patern D")

    With this change, the branching worked correctly.
    Alternatively, you can also solve it by writing and instead of &.

    def trable(a, b):
        if a >= 10 and b >= 10:
            print("patern A")
        elif a < 10 and b < 10:
            print("patern B")
        elif a >= 10 and b >= 10:
            print("patern C")
        else:
            print("patern D")

    & and and may seem the same, but & also acts as a bitwise AND, so in the original program

    a >= 10 & b < 10

    this apparently means a >= (10 & b) < 10, so with a=9 and b=9 the inequality becomes
    9>=8<10, which evaluates to True.

    It’s tricky, isn’t it…

  • What to Do When Your PC’s Fan Spins at Full Blast the Moment You Boot Up

    What to Do When Your PC’s Fan Spins at Full Blast the Moment You Boot Up

    When you boot up your computer and the fan starts spinning at full blast, you might worry that the machine has broken. When a computer suddenly starts behaving strangely, it’s easy to feel there’s nothing you can do, but many problems can actually be fixed on your own.

    That said, you do this at your own risk, so be extremely careful, and if you know someone knowledgeable, it’s a good idea to work on it together.
    Computers aren’t cheap, after all.

    This time, based on my own experience, I’ll describe what to do when the fan spins at full speed on startup and doesn’t calm down even a while after Windows has booted.

    Symptoms

    I had left my desktop computer on overnight, and when I noticed it in the morning, I could hear the fan running at full speed.

    I shut the computer down once, but the fan kept spinning, so I switched off the power supply and unplugged the power cord.
    I pressed the power button several times to discharge the residual power and then booted up again, but the fan was still running at full speed.

    Other than a slow startup, though, there were no other apparent problems.

    The fix

    I checked the CPU temperature in the BIOS setup screen, but even at its highest it was only around 30 °C, so there was no problem there.

    I set the PC to power-saving mode in the BIOS, but nothing changed.
    I also lowered the minimum fan speed, but again nothing changed.

    I unplugged every cable connected to the computer, including the power and USB cables, pressed the power button several times to discharge it, and then opened up the case.

    I removed the coin cell battery and pressed the power button several times (a CMOS clear).
    [There are other ways to clear the CMOS. It’s also a good idea to disconnect the cables from the power supply to the motherboard at this point.]

    Clearing the CMOS is a way of resetting the motherboard’s BIOS: after removing the coin cell battery, you drain the electricity remaining in the motherboard.

    I put the coin cell battery back in, reconnected the keyboard, power, and video cables, and turned the computer on.
    The fan speed was back to normal.
    Just to be safe, I also updated the BIOS.

    For now, everything is running normally.

    Cause

    The direct cause appears to have been a BIOS error.
    Something odd must have happened, resulting in the fan running at full speed.

    BIOS errors can often be fixed by clearing the CMOS, so whenever you suspect a BIOS error is the culprit, resetting the BIOS with a CMOS clear will frequently solve the problem.

    BIOS errors can be caused by leaving the computer powered on for long periods, dust building up inside the case, shutting the machine down abruptly at a bad moment, or installing sketchy software.

    Dust buildup inside the case is especially common, so cleaning the inside of your computer with compressed air about once a year can help prevent it.

    I finished by updating the BIOS this time. A reset alone is probably sufficient, but updating may also clear out underlying errors.
    It’s the same idea as a camera that won’t power on starting up again after a firmware update.

    Being able to fix computer problems yourself is a genuinely valuable skill, since it saves on repair costs.
    Also, when it comes to errors like a computer that won’t boot, there are surprisingly few things you can do short of replacing parts, so it’s worth looking into the other options first.

    Bonus

    I’ve started offering consultations on computer problems through Coconala!

    パソコンが動かなくなった時の対処法を提案します パソコンが突然動かなくなった駆け込み寺として

    I’ve worked with all sorts of computers and seen all sorts of trouble.
    My Coconala listing says “when your computer stops working,” but I’m happy to take on any kind of problem you might run into while using a computer.

    I’ve only just started using Coconala, so I may still be getting the hang of it, but please do reach out if you run into computer trouble.

    I use both Mac and Windows, so I can help with issues on either platform.