packages feed

fei-datasets-1.0.0: utils/bench.hs

import qualified Codec.Picture                as JUC
import qualified Codec.Picture.Extra          as JUC
import qualified Codec.Picture.Repa           as RPJ
import           Control.Monad.Trans.Resource
import           Criterion.Main
import qualified Data.Array.Repa              as Repa
import           Data.Conduit
import           Data.Conduit.Async
import qualified Data.Conduit.List            as C
import           Data.Random.Source.StdGen    (mkStdGen)
import qualified Graphics.Image               as HIP
import           RIO
import           RIO.Directory
import           RIO.FilePath

import qualified MXNet.NN.DataIter.Coco       as Coco

main = do
    home <- getHomeDirectory
    let imgFilePath = home </> ".mxnet/datasets/coco/val2017/000000121242.jpg"
    Right imgjuc <- liftIO (JUC.readImage imgFilePath)
    Right imghip <- liftIO (HIP.readImage imgFilePath :: IO (Either String (HIP.Image HIP.VS HIP.RGB Double)))

    rand_gen <- newIORef $ mkStdGen 99
    cocoInst <- Coco.coco (home </> ".mxnet/datasets/coco") "val2017"
    let cocoConf = Coco.CocoConfig cocoInst 1024 (0.5, 0.5, 0.5) (1, 1, 1)
        iter1 = Coco.cocoImages rand_gen
        iter2 = Coco.cocoImagesBBoxes rand_gen

    defaultMain
        [
          bench "scale-img-juicy" $ nfIO $
            let img1 = JUC.convertRGB8 imgjuc
                img2 = JUC.scaleBilinear 1024 1024 img1
                img3 = RPJ.imgData (RPJ.convertImage img2 :: RPJ.Img RPJ.RGB)
            in Repa.computeUnboxedP img3

        , bench "scale-img-hip" $ nfIO $
            let img2 = HIP.resize HIP.Bilinear HIP.Edge (1024, 1024) imghip
            in return img2

        , bench "img-iter" $ nfIO $
            runResourceT $
                flip runReaderT cocoConf $
                    runConduit $ iter1 .| C.take 10

        , bench "img-iter-async" $ nfIO $
            runResourceT $
                flip runReaderT cocoConf $
                    runCConduit $ iter1 =$=& C.take 10

        , bench "img-iter-and-load-gt" $ nfIO $
            runResourceT $
                flip runReaderT cocoConf $
                    runConduit $ iter2 .| C.take 10
        ]