diff --git a/examples/pytorch_platform_handler/README.md b/examples/pytorch_platform_handler/README.md deleted file mode 100644 index 13e32249..00000000 --- a/examples/pytorch_platform_handler/README.md +++ /dev/null @@ -1,109 +0,0 @@ - - -# PyTorch Example - -In this section, we demonstrate an end-to-end example for using the -[PyTorch Platform \[Experimental\]](../../README.md#pytorch-platform-experimental) -to serve a PyTorch model directly, **without** needing to implement the -`TritonPythonModel` class. - -## Create a ResNet50 model repository - -We will use the files that come with this example to create the model -repository. - -First, download [client.py](client.py), [config.pbtxt](config.pbtxt), -[model.py](model.py), -[mug.jpg](https://raw.githubusercontent.com/triton-inference-server/server/main/qa/images/mug.jpg) -and [resnet50_labels.txt](resnet50_labels.txt) to your local machine. - -Next, at the directory where the downloaded files are saved at, create a model -repository with the following commands: -``` -$ mkdir -p models/resnet50_pytorch/1 -$ mv model.py models/resnet50_pytorch/1 -$ mv config.pbtxt models/resnet50_pytorch -``` - -## Pull the Triton Docker images - -We need to install Docker and NVIDIA Container Toolkit before proceeding, refer -to the -[installation steps](https://github.com/triton-inference-server/server/tree/main/docs#installation). - -To pull the latest containers, run the following commands: -``` -$ docker pull nvcr.io/nvidia/tritonserver:-py3 -$ docker pull nvcr.io/nvidia/tritonserver:-py3-sdk -``` -See the installation steps above for the `` version. - -For example, if the version is `23.08`, then: -``` -$ docker pull nvcr.io/nvidia/tritonserver:23.08-py3 -$ docker pull nvcr.io/nvidia/tritonserver:23.08-py3-sdk -``` - -Be sure to replace the `` with the version pulled for all the remaining -parts of this example. - -## Start the Triton Server - -At the directory where we created the PyTorch model (at where the "models" -folder is located), run the following command: -``` -$ docker run -it --rm --gpus all --shm-size 1g -p 8000:8000 -v `pwd`:/pytorch_example nvcr.io/nvidia/tritonserver:-py3 /bin/bash -``` - -Inside the container, we need to install PyTorch, Pillow and Requests to run this example. -We recommend using `pip` method for the installations, for example: -``` -$ pip3 install torch Pillow requests -``` - -Finally, we need to start the Triton Server, run the following command: -``` -$ tritonserver --model-repository=/pytorch_example/models -``` - -To leave the container for the next step, press: `CTRL + P + Q`. - -## Test inference - -At the directory where the client.py is located, run the following command: -``` -$ docker run --rm --net=host -v `pwd`:/pytorch_example nvcr.io/nvidia/tritonserver:-py3-sdk python3 /pytorch_example/client.py -``` - -A successful inference will print the following at the end: -``` -Result: COFFEE MUG -Expected result: COFFEE MUG -PASS: PyTorch platform handler -``` diff --git a/examples/pytorch_platform_handler/client.py b/examples/pytorch_platform_handler/client.py deleted file mode 100755 index ccd4624d..00000000 --- a/examples/pytorch_platform_handler/client.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of NVIDIA CORPORATION nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import os -import sys - -import numpy as np -from PIL import Image -from tritonclient import http as httpclient -from tritonclient.utils import * - -script_directory = os.path.dirname(os.path.realpath(__file__)) - -server_url = "localhost:8000" -model_name = "resnet50_pytorch" -input_name = "INPUT" -output_name = "OUTPUT" -label_path = os.path.join(script_directory, "resnet50_labels.txt") -# The 'mug.jpg' image will be present at the script_directory if the steps on -# the provided README.md are followed. The image may also be found at -# '/workspace/images/mug.jpg' on the SDK container or -# '/opt/tritonserver/qa/images/mug.jpg' on the QA container. -image_path = os.path.join(script_directory, "mug.jpg") -expected_output_class = "COFFEE MUG" - - -def _load_input_image(): - raw_image = Image.open(image_path) - raw_image = raw_image.convert("RGB").resize((224, 224), Image.BILINEAR) - input_image = np.array(raw_image).astype(np.float32) - input_image = (input_image / 127.5) - 1 - input_image = np.transpose(input_image, (2, 0, 1)) - input_image = np.reshape(input_image, (1, 3, 224, 224)) - return input_image - - -def _infer(input_image): - with httpclient.InferenceServerClient(server_url) as client: - input_tensors = httpclient.InferInput(input_name, input_image.shape, "FP32") - input_tensors.set_data_from_numpy(input_image) - results = client.infer(model_name=model_name, inputs=[input_tensors]) - output_tensors = results.as_numpy(output_name) - return output_tensors - - -def _check_output(output_tensors): - with open(label_path) as f: - labels_dict = {idx: line.strip() for idx, line in enumerate(f)} - max_id = np.argmax(output_tensors, axis=1)[0] - output_class = labels_dict[max_id] - print("Result: " + output_class) - print("Expected result: " + expected_output_class) - if output_class != expected_output_class: - return False - return True - - -if __name__ == "__main__": - input_image = _load_input_image() - output_tensors = _infer(input_image) - result_valid = _check_output(output_tensors) - - if not result_valid: - print("PyTorch platform handler example error: Unexpected result") - sys.exit(1) - - print("PASS: PyTorch platform handler") diff --git a/examples/pytorch_platform_handler/config.pbtxt b/examples/pytorch_platform_handler/config.pbtxt deleted file mode 100644 index 70d99dad..00000000 --- a/examples/pytorch_platform_handler/config.pbtxt +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of NVIDIA CORPORATION nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -name: "resnet50_pytorch" -backend: "python" -platform: "pytorch" - -max_batch_size: 128 - -input { - name: "INPUT" - data_type: TYPE_FP32 - format: FORMAT_NCHW - dims: [ 3, 224, 224 ] -} -output { - name: "OUTPUT" - data_type: TYPE_FP32 - dims: [ 1000 ] -} - -instance_group [{ kind: KIND_CPU }] diff --git a/examples/pytorch_platform_handler/model.py b/examples/pytorch_platform_handler/model.py deleted file mode 100755 index 391063b8..00000000 --- a/examples/pytorch_platform_handler/model.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of NVIDIA CORPORATION nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import torch -import torchvision - - -class ResNet50(torch.nn.Module): - # This is a native PyTorch model class. `TritonPythonModel` is not needed. - - def __init__(self): - super().__init__() - self._model = torch.hub.load( - "pytorch/vision:v" + torchvision.__version__.split("+")[0], - "resnet50", - weights="ResNet50_Weights.IMAGENET1K_V2", - skip_validation=True, - ) - - def forward(self, input_tensor): - output_tensor = self._model(input_tensor) - return output_tensor diff --git a/examples/pytorch_platform_handler/resnet50_labels.txt b/examples/pytorch_platform_handler/resnet50_labels.txt deleted file mode 100644 index 2376a285..00000000 --- a/examples/pytorch_platform_handler/resnet50_labels.txt +++ /dev/null @@ -1,1000 +0,0 @@ -TENCH -GOLDFISH -WHITE SHARK -TIGER SHARK -HAMMERHEAD SHARK -ELECTRIC RAY -STINGRAY -ROOSTER -HEN -OSTRICH -BRAMBLING -GOLDFINCH -HOUSE FINCH -SNOWBIRD -INDIGO FINCH -ROBIN -BULBUL -JAY -MAGPIE -CHICKADEE -WATER OUZEL -KITE -BALD EAGLE -VULTURE -GREAT GREY OWL -FIRE SALAMANDER -NEWT -EFT -SPOTTED SALAMANDER -AXOLOTL -BULL FROG -TREE FROG -TAILED FROG -LOGGERHEAD -LEATHERBACK TURTLE -MUD TURTLE -TERRAPIN -BOX TURTLE -BANDED GECKO -COMMON IGUANA -AMERICAN CHAMELEON -WHIPTAIL -AGAMA -FRILLED LIZARD -ALLIGATOR LIZARD -GILA MONSTER -GREEN LIZARD -AFRICAN CHAMELEON -KOMODO DRAGON -AFRICAN CROCODILE -AMERICAN ALLIGATOR -TRICERATOPS -THUNDER SNAKE -RINGNECK SNAKE -HOGNOSE SNAKE -GREEN SNAKE -KING SNAKE -GARTER SNAKE -WATER SNAKE -VINE SNAKE -NIGHT SNAKE -BOA -ROCK PYTHON -COBRA -GREEN MAMBA -SEA SNAKE -HORNED VIPER -DIAMONDBACK -SIDEWINDER -TRILOBITE -HARVESTMAN -SCORPION -GARDEN SPIDER -BARN SPIDER -GARDEN SPIDER -BLACK WIDOW -TARANTULA -WOLF SPIDER -TICK -CENTIPEDE -GROUSE -PTARMIGAN -RUFFED GROUSE -PRAIRIE CHICKEN -PEACOCK -QUAIL -PARTRIDGE -AFRICAN GREY -MACAW -COCKATOO -LORIKEET -COUCAL -BEE EATER -HORNBILL -HUMMINGBIRD -JACAMAR -TOUCAN -DRAKE -MERGANSER -GOOSE -BLACK SWAN -TUSKER -ECHIDNA -PLATYPUS -WALLABY -KOALA -WOMBAT -JELLYFISH -SEA ANEMONE -BRAIN CORAL -FLATWORM -NEMATODE -CONCH -SNAIL -SLUG -SEA SLUG -CHITON -CHAMBERED NAUTILUS -DUNGENESS CRAB -ROCK CRAB -FIDDLER CRAB -KING CRAB -AMERICAN LOBSTER -SPINY LOBSTER -CRAYFISH -HERMIT CRAB -ISOPOD -WHITE STORK -BLACK STORK -SPOONBILL -FLAMINGO -LITTLE BLUE HERON -AMERICAN EGRET -BITTERN -CRANE -LIMPKIN -EUROPEAN GALLINULE -AMERICAN COOT -BUSTARD -RUDDY TURNSTONE -RED-BACKED SANDPIPER -REDSHANK -DOWITCHER -OYSTERCATCHER -PELICAN -KING PENGUIN -ALBATROSS -GREY WHALE -KILLER WHALE -DUGONG -SEA LION -CHIHUAHUA -JAPANESE SPANIEL -MALTESE DOG -PEKINESE -SHIH-TZU -BLENHEIM SPANIEL -PAPILLON -TOY TERRIER -RHODESIAN RIDGEBACK -AFGHAN HOUND -BASSET -BEAGLE -BLOODHOUND -BLUETICK -COONHOUND -WALKER HOUND -ENGLISH FOXHOUND -REDBONE -BORZOI -IRISH WOLFHOUND -ITALIAN GREYHOUND -WHIPPET -IBIZAN HOUND -NORWEGIAN ELKHOUND -OTTERHOUND -SALUKI -SCOTTISH DEERHOUND -WEIMARANER -STAFFORDSHIRE BULLTERRIER -STAFFORDSHIRE TERRIER -BEDLINGTON TERRIER -BORDER TERRIER -KERRY BLUE TERRIER -IRISH TERRIER -NORFOLK TERRIER -NORWICH TERRIER -YORKSHIRE TERRIER -WIRE-HAIRED FOX TERRIER -LAKELAND TERRIER -SEALYHAM TERRIER -AIREDALE -CAIRN -AUSTRALIAN TERRIER -DANDIE DINMONT -BOSTON BULL -MINIATURE SCHNAUZER -GIANT SCHNAUZER -STANDARD SCHNAUZER -SCOTCH TERRIER -TIBETAN TERRIER -SILKY TERRIER -WHEATEN TERRIER -WHITE TERRIER -LHASA -RETRIEVER -CURLY-COATED RETRIEVER -GOLDEN RETRIEVER -LABRADOR RETRIEVER -CHESAPEAKE BAY RETRIEVER -SHORT-HAIRED POINTER -VISLA -ENGLISH SETTER -IRISH SETTER -GORDON SETTER -BRITTANY SPANIEL -CLUMBER -ENGLISH SPRINGER -WELSH SPRINGER SPANIEL -COCKER SPANIEL -SUSSEX SPANIEL -IRISH WATERSPANIEL -KUVASZ -SCHIPPERKE -GROENENDAEL -MALINOIS -BRIARD -KELPIE -KOMONDOR -OLD ENGLISH SHEEPDOG -SHETLAND SHEEPDOG -COLLIE -BORDER COLLIE -BOUVIER DES FLANDRES -ROTTWEILER -GERMAN SHEPHERD -DOBERMAN -MINIATURE PINSCHER -GREATER SWISS MOUNTAIN DOG -BERNESE MOUNTAIN DOG -APPENZELLER -ENTLEBUCHER -BOXER -BULL MASTIFF -TIBETAN MASTIFF -FRENCH BULLDOG -GREAT DANE -SAINT BERNARD -ESKIMO DOG -MALAMUTE -SIBERIAN HUSKY -DALMATIAN -AFFENPINSCHER -BASENJI -PUG -LEONBERG -NEWFOUNDLAND -GREAT PYRENEES -SAMOYED -POMERANIAN -CHOW -KEESHOND -BRABANCON GRIFFON -PEMBROKE -CARDIGAN -TOY POODLE -MINIATURE POODLE -STANDARD POODLE -MEXICAN HAIRLESS -TIMBER WOLF -WHITE WOLF -RED WOLF -COYOTE -DINGO -DHOLE -AFRICAN HUNTING DOG -HYENA -RED FOX -KIT FOX -ARCTIC FOX -GREY FOX -TABBY -TIGER CAT -PERSIAN CAT -SIAMESE CAT -EGYPTIAN CAT -COUGAR -LYNX -LEOPARD -SNOW LEOPARD -JAGUAR -LION -TIGER -CHEETAH -BROWN BEAR -AMERICAN BLACK BEAR -ICE BEAR -SLOTH BEAR -MONGOOSE -MEERKAT -TIGER BEETLE -LADYBUG -GROUND BEETLE -LONG-HORNED BEETLE -LEAF BEETLE -DUNG BEETLE -RHINOCEROS BEETLE -WEEVIL -FLY -BEE -ANT -GRASSHOPPER -CRICKET -WALKING STICK -COCKROACH -MANTIS -CICADA -LEAFHOPPER -LACEWING -DRAGONFLY -DAMSELFLY -ADMIRAL -RINGLET -MONARCH -CABBAGE BUTTERFLY -SULPHUR BUTTERFLY -LYCAENID -STARFISH -SEA URCHIN -SEA CUCUMBER -WOOD RABBIT -HARE -ANGORA -HAMSTER -PORCUPINE -FOX SQUIRREL -MARMOT -BEAVER -GUINEA PIG -SORREL -ZEBRA -HOG -WILD BOAR -WARTHOG -HIPPOPOTAMUS -OX -WATER BUFFALO -BISON -RAM -BIGHORN -IBEX -HARTEBEEST -IMPALA -GAZELLE -ARABIAN CAMEL -LLAMA -WEASEL -MINK -POLECAT -BLACK-FOOTED FERRET -OTTER -SKUNK -BADGER -ARMADILLO -THREE-TOED SLOTH -ORANGUTAN -GORILLA -CHIMPANZEE -GIBBON -SIAMANG -GUENON -PATAS -BABOON -MACAQUE -LANGUR -COLOBUS -PROBOSCIS MONKEY -MARMOSET -CAPUCHIN -HOWLER MONKEY -TITI -SPIDER MONKEY -SQUIRREL MONKEY -MADAGASCAR CAT -INDRI -INDIAN ELEPHANT -AFRICAN ELEPHANT -LESSER PANDA -GIANT PANDA -BARRACOUTA -EEL -COHO -ROCK BEAUTY -ANEMONE FISH -STURGEON -GAR -LIONFISH -PUFFER -ABACUS -ABAYA -ACADEMIC GOWN -ACCORDION -ACOUSTIC GUITAR -AIRCRAFT CARRIER -AIRLINER -AIRSHIP -ALTAR -AMBULANCE -AMPHIBIAN -ANALOG CLOCK -APIARY -APRON -ASHCAN -ASSAULT RIFLE -BACKPACK -BAKERY -BALANCE BEAM -BALLOON -BALLPOINT -BAND AID -BANJO -BANNISTER -BARBELL -BARBER CHAIR -BARBERSHOP -BARN -BAROMETER -BARREL -BARROW -BASEBALL -BASKETBALL -BASSINET -BASSOON -BATHING CAP -BATH TOWEL -BATHTUB -BEACH WAGON -BEACON -BEAKER -BEARSKIN -BEER BOTTLE -BEER GLASS -BELL COTE -BIB -BICYCLE-BUILT-FOR-TWO -BIKINI -BINDER -BINOCULARS -BIRDHOUSE -BOATHOUSE -BOBSLED -BOLO TIE -BONNET -BOOKCASE -BOOKSHOP -BOTTLECAP -BOW -BOW TIE -BRASS -BRASSIERE -BREAKWATER -BREASTPLATE -BROOM -BUCKET -BUCKLE -BULLETPROOF VEST -BULLET TRAIN -BUTCHER SHOP -CAB -CALDRON -CANDLE -CANNON -CANOE -CAN OPENER -CARDIGAN -CAR MIRROR -CAROUSEL -CARPENTERS KIT -CARTON -CAR WHEEL -CASH MACHINE -CASSETTE -CASSETTE PLAYER -CASTLE -CATAMARAN -CD PLAYER -CELLO -CELLULAR TELEPHONE -CHAIN -CHAINLINK FENCE -CHAIN MAIL -CHAIN SAW -CHEST -CHIFFONIER -CHIME -CHINA CABINET -CHRISTMAS STOCKING -CHURCH -CINEMA -CLEAVER -CLIFF DWELLING -CLOAK -CLOG -COCKTAIL SHAKER -COFFEE MUG -COFFEEPOT -COIL -COMBINATION LOCK -COMPUTER KEYBOARD -CONFECTIONERY -CONTAINER SHIP -CONVERTIBLE -CORKSCREW -CORNET -COWBOY BOOT -COWBOY HAT -CRADLE -CRANE -CRASH HELMET -CREATE -CRIB -CROCK POT -CROQUET BALL -CRUTCH -CUIRASS -DAM -DESK -DESKTOP COMPUTER -DIAL TELEPHONE -DIAPER -DIGITAL CLOCK -DIGITAL WATCH -DINING TABLE -DISHRAG -DISHWASHER -DISK BRAKE -DOCK -DOGSLED -DOME -DOORMAT -DRILLING PLATFORM -DRUM -DRUMSTICK -DUMBBELL -DUTCH OVEN -ELECTRIC FAN -ELECTRIC GUITAR -ELECTRIC LOCOMOTIVE -ENTERTAINMENT CENTER -ENVELOPE -ESPRESSO MAKER -FACE POWDER -FEATHER BOA -FILE -FIREBOAT -FIRE ENGINE -FIRE SCREEN -FLAGPOLE -FLUTE -FOLDING CHAIR -FOOTBALL HELMET -FORKLIFT -FOUNTAIN -FOUNTAIN PEN -FOUR-POSTER -FREIGHT CAR -FRENCH HORN -FRYING PAN -FUR COAT -GARBAGE TRUCK -GASMASK -GAS PUMP -GOBLET -GO-KART -GOLF BALL -GOLFCART -GONDOLA -GONG -GOWN -GRAND PIANO -GREENHOUSE -GRILLE -GROCERY STORE -GUILLOTINE -HAIR SLIDE -HAIR SPRAY -HALF TRACK -HAMMER -HAMPER -HAND BLOWER -HAND-HELD COMPUTER -HANDKERCHIEF -HARD DISC -HARMONICA -HARP -HARVESTER -HATCHET -HOLSTER -HOME THEATER -HONEYCOMB -HOOK -HOOPSKIRT -HORIZONTAL BAR -HORSE CART -HOURGLASS -IPOD -IRON -JACK-O-LANTERN -JEAN -JEEP -JERSEY -JIGSAW PUZZLE -JINRIKISHA -JOYSTICK -KIMONO -KNEE PAD -KNOT -LAB COAT -LADLE -LAMPSHADE -LAPTOP -LAWN MOWER -LENS CAP -LETTER OPENER -LIBRARY -LIFEBOAT -LIGHTER -LIMOUSINE -LINER -LIPSTICK -LOAFER -LOTION -LOUDSPEAKER -LOUPE -LUMBERMILL -MAGNETIC COMPASS -MAILBAG -MAILBOX -MAILLOT -MAILLOT -MANHOLE COVER -MARACA -MARIMBA -MASK -MATCHSTICK -MAYPOLE -MAZE -MEASURING CUP -MEDICINE CHEST -MEGALITH -MICROPHONE -MICROWAVE -MILITARY UNIFORM -MILK CAN -MINIBUS -MINISKIRT -MINIVAN -MISSILE -MITTEN -MIXING BOWL -MOBILE HOME -MODEL T -MODEM -MONASTERY -MONITOR -MOPED -MORTAR -MORTARBOARD -MOSQUE -MOSQUITO NET -MOTOR SCOOTER -MOUNTAIN BIKE -MOUNTAIN TENT -MOUSE -MOUSETRAP -MOVING VAN -MUZZLE -NAIL -NECK BRACE -NECKLACE -NIPPLE -NOTEBOOK -OBELISK -OBOE -OCARINA -ODOMETER -OIL FILTER -ORGAN -OSCILLOSCOPE -OVERSKIRT -OXCART -OXYGEN MASK -PACKET -PADDLE -PADDLEWHEEL -PADLOCK -PAINTBRUSH -PAJAMA -PALACE -PANPIPE -PAPER TOWEL -PARACHUTE -PARALLEL BARS -PARK BENCH -PARKING METER -PASSENGER CAR -PATIO -PAY-PHONE -PEDESTAL -PENCIL BOX -PENCIL SHARPENER -PERFUME -PETRI DISH -PHOTOCOPIER -PICK -PICKELHAUBE -PICKET FENCE -PICKUP -PIER -PIGGY BANK -PILL BOTTLE -PILLOW -PING-PONG BALL -PINWHEEL -PIRATE -PITCHER -PLANE -PLANETARIUM -PLASTIC BAG -PLATE RACK -PLOW -PLUNGER -POLAROID CAMERA -POLE -POLICE VAN -PONCHO -POOL TABLE -POP BOTTLE -POT -POTTERS WHEEL -POWER DRILL -PRAYER RUG -PRINTER -PRISON -PROJECTILE -PROJECTOR -PUCK -PUNCHING BAG -PURSE -QUILL -QUILT -RACER -RACKET -RADIATOR -RADIO -RADIO TELESCOPE -RAIN BARREL -RECREATIONAL VEHICLE -REEL -REFLEX CAMERA -REFRIGERATOR -REMOTE CONTROL -RESTAURANT -REVOLVER -RIFLE -ROCKING CHAIR -ROTISSERIE -RUBBER ERASER -RUGBY BALL -RULE -RUNNING SHOE -SAFE -SAFETY PIN -SALTSHAKER -SANDAL -SARONG -SAX -SCABBARD -SCALE -SCHOOL BUS -SCHOONER -SCOREBOARD -SCREEN -SCREW -SCREWDRIVER -SEAT BELT -SEWING MACHINE -SHIELD -SHOE SHOP -SHOJI -SHOPPING BASKET -SHOPPING CART -SHOVEL -SHOWER CAP -SHOWER CURTAIN -SKI -SKI MASK -SLEEPING BAG -SLIDE RULE -SLIDING DOOR -SLOT -SNORKEL -SNOWMOBILE -SNOWPLOW -SOAP DISPENSER -SOCCER BALL -SOCK -SOLAR DISH -SOMBRERO -SOUP BOWL -SPACE BAR -SPACE HEATER -SPACE SHUTTLE -SPATULA -SPEEDBOAT -SPIDER WEB -SPINDLE -SPORTS CAR -SPOTLIGHT -STAGE -STEAM LOCOMOTIVE -STEEL ARCH BRIDGE -STEEL DRUM -STETHOSCOPE -STOLE -STONE WALL -STOPWATCH -STOVE -STRAINER -STREETCAR -STRETCHER -STUDIO COUCH -STUPA -SUBMARINE -SUIT -SUNDIAL -SUNGLASS -SUNGLASSES -SUNSCREEN -SUSPENSION BRIDGE -SWAB -SWEATSHIRT -SWIMMING TRUNKS -SWING -SWITCH -SYRINGE -TABLE LAMP -TANK -TAPE PLAYER -TEAPOT -TEDDY -TELEVISION -TENNIS BALL -THATCH -THEATER CURTAIN -THIMBLE -THRESHER -THRONE -TILE ROOF -TOASTER -TOBACCO SHOP -TOILET SEAT -TORCH -TOTEM POLE -TOW TRUCK -TOYSHOP -TRACTOR -TRAILER TRUCK -TRAY -TRENCH COAT -TRICYCLE -TRIMARAN -TRIPOD -TRIUMPHAL ARCH -TROLLEYBUS -TROMBONE -TUB -TURNSTILE -TYPEWRITER KEYBOARD -UMBRELLA -UNICYCLE -UPRIGHT -VACUUM -VASE -VAULT -VELVET -VENDING MACHINE -VESTMENT -VIADUCT -VIOLIN -VOLLEYBALL -WAFFLE IRON -WALL CLOCK -WALLET -WARDROBE -WARPLANE -WASHBASIN -WASHER -WATER BOTTLE -WATER JUG -WATER TOWER -WHISKEY JUG -WHISTLE -WIG -WINDOW SCREEN -WINDOW SHADE -WINDSOR TIE -WINE BOTTLE -WING -WOK -WOODEN SPOON -WOOL -WORM FENCE -WRECK -YAWL -YURT -WEB SITE -COMIC BOOK -CROSSWORD PUZZLE -STREET SIGN -TRAFFIC LIGHT -BOOK JACKET -MENU -PLATE -GUACAMOLE -CONSOMME -HOT POT -TRIFLE -ICE CREAM -ICE LOLLY -FRENCH LOAF -BAGEL -PRETZEL -CHEESEBURGER -HOTDOG -MASHED POTATO -HEAD CABBAGE -BROCCOLI -CAULIFLOWER -ZUCCHINI -SPAGHETTI SQUASH -ACORN SQUASH -BUTTERNUT SQUASH -CUCUMBER -ARTICHOKE -BELL PEPPER -CARDOON -MUSHROOM -GRANNY SMITH -STRAWBERRY -ORANGE -LEMON -FIG -PINEAPPLE -BANANA -JACKFRUIT -CUSTARD APPLE -POMEGRANATE -HAY -CARBONARA -CHOCOLATE SAUCE -DOUGH -MEAT LOAF -PIZZA -POTPIE -BURRITO -RED WINE -ESPRESSO -CUP -EGGNOG -ALP -BUBBLE -CLIFF -CORAL REEF -GEYSER -LAKESIDE -PROMONTORY -SANDBAR -SEASHORE -VALLEY -VOLCANO -BALLPLAYER -GROOM -SCUBA DIVER -RAPESEED -DAISY -LADY SLIPPER -CORN -ACORN -HIP -BUCKEYE -CORAL FUNGUS -AGARIC -GYROMITRA -STINKHORN -EARTHSTAR -HEN-OF-THE-WOODS -BOLETE -EAR -TOILET TISSUE